From kbh at umn.edu Tue Jan 1 03:12:47 2019 From: kbh at umn.edu (Favonia) Date: Mon, 31 Dec 2018 20:12:47 -0600 Subject: [Agda] Postdoc Position at the University of Minnesota Message-ID: Dear All, I am looking for postdocs for my group at the University of Minnesota, Twin Cities, USA. The length is about 18-24 months but negotiable. The funding can support a wide range of topics in type theory and programming language theory. I am particularly interested in raising the rigor of computer programs or mathematical proofs. To name a few possible research directions: 1. higher-dimensional type theory (e.g., cubical type theory) 2. mechanization of proofs (e.g., in homotopy theory) 3. property-based testing I am open to other topics not on the list. Please check my website https://favonia.org for the work I did. Teaching is not required, but we can discuss it if you are interested. The start date is flexible though I prefer early spring. REQUIREMENT You must have a Ph.D. in Computer Science, Mathematics, Philosophy, or some related field when the job starts. I need your CV, your cover letter (explaining your motivation) and two professional references. PREFERENCE Background in type theory or programming language theory, good publication record, and experience in proof mechanization are all pluses. HOW TO APPLY If you are currently an employee of the University of Minnesota, use this link: https://hr.myu.umn.edu/jobs/int/328079 Otherwise, this is for everyone else: https://hr.myu.umn.edu/jobs/ext/328079 DIVERSITY We take diversity and inclusiveness seriously, which is an important reason why I joined the University. I strongly encourage people of often underrepresented groups (not just regarding race or gender) to consider this position. Best, Favonia they/them/theirs http://favonia.org -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Wed Jan 2 13:15:58 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 2 Jan 2019 13:15:58 +0100 Subject: [Agda] Codata error In-Reply-To: <1546189827.2360.3.camel@one.mechvel.pereslavl.ru> References: <1546167468.2435.7.camel@one.mechvel.pereslavl.ru> <20181230120257.36f8d99f@debian> <1546189827.2360.3.camel@one.mechvel.pereslavl.ru> Message-ID: <3f90e86d-46c1-10e8-9b68-60df5b751811@cse.gu.se> On 30/12/2018 18.10, Sergei Meshveliani wrote: > Now I tried Experimental branches of Agda and of stdlib both of > December 30, 2018. > And it yields Termination check failure in Codata.Musical.Conat. If you use the experimental branch of the standard library, and the master branch of Agda, then your code is accepted. -- /NAD From mechvel at botik.ru Wed Jan 2 13:47:22 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 02 Jan 2019 15:47:22 +0300 Subject: [Agda] Codata error In-Reply-To: <3f90e86d-46c1-10e8-9b68-60df5b751811@cse.gu.se> References: <1546167468.2435.7.camel@one.mechvel.pereslavl.ru> <20181230120257.36f8d99f@debian> <1546189827.2360.3.camel@one.mechvel.pereslavl.ru> <3f90e86d-46c1-10e8-9b68-60df5b751811@cse.gu.se> Message-ID: <1546433242.2366.8.camel@one.mechvel.pereslavl.ru> On Wed, 2019-01-02 at 13:15 +0100, Nils Anders Danielsson wrote: > On 30/12/2018 18.10, Sergei Meshveliani wrote: > > Now I tried Experimental branches of Agda and of stdlib both of > > December 30, 2018. > > And it yields Termination check failure in Codata.Musical.Conat. > > If you use the experimental branch of the standard library, and the > master branch of Agda, then your code is accepted. > The www page shows the git command for Development version. But it occurs that the experimental branch is inside it (I have got it with the hint given by Guillaume). May be the page needs to add an instruction for getting the experimental branch. Regards, ------ Sergei From Graham.Hutton at nottingham.ac.uk Mon Jan 7 10:00:33 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Mon, 7 Jan 2019 09:00:33 +0000 Subject: [Agda] 10 PhD studentships in Nottingham Message-ID: Dear all, *** FINAL CALL -- APPLICATION DEADLINE 18 JANUARY 2019 *** The School of Computer Science at the University of Nottingham is seeking applications for 10 fully-funded PhD studentships: https://tinyurl.com/10-phds-2019 Applicants in the area of the Functional Programming Laboratory (https://tinyurl.com/fp-notts) are strongly encouraged! If you are interested in applying, please contact a potential supervisor as soon as possible (the application deadline is 18th January): Thorsten Altenkirch - constructive logic, proof assistants, homotopy type theory, category theory, lambda calculus. Venanzio Capretta - type theory, mathematical logic, corecursive structures, proof assistants, category theory, epistemic logic. Graham Hutton - functional programming, program calculation and transformation, correctness and efficiency, category theory. Henrik Nilsson - functional reactive programming, modelling and simulation, domain-specific languages, probabilistic languages. Best wishes, Graham +-----------------------------------------------------------+ 10 Fully-Funded PhD Studentships School of Computer Science University of Nottingham, UK https://tinyurl.com/10-phds-2019 Applications are invited for up to ten fully-funded PhD studentships in the School of Computer Science at the University of Nottingham, starting on 1 October 2019. The topics for the studentships are open, but should relate to one of the School?s research groups: Agents Lab; Automated Scheduling and Planning; Computer Vision Lab; Data Driven Algorithms, Systems and Design; Functional Programming Lab; Intelligent Modelling and Analysis; Uncertainty in Data and Decision Making; Mixed Reality Lab. The studentships are for a minimum of three years and include a stipend of ?14,777 per year and tuition fees. They are open to students of any nationality. Applicants are normally expected to have a first-class MSc or BSc in Computer Science or a related discipline, and must obtain the support of a supervisor in the School prior to submitting their application. Initial contact with supervisors should be made at least two weeks prior to the closing date for applications. Informal enquiries may be addressed to SS-PGR-JC at nottingham.ac.uk. To apply, please submit the following items by email to: Christine.Fletcher at nottingham.ac.uk: (1) a brief covering letter that describes your reasons for wishing to pursue a PhD, your proposed research area and topic, and the name of the potential supervisor whose support you have already secured; (2) a copy of your CV, including your actual or expected degree classes, and results of all University examinations; (3) an extended example of your technical writing, such as a project report or dissertation; (4) contact details for two academic referees. Closing date for applications: Friday 18 January 2019 +-----------------------------------------------------------+ This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From m.escardo at cs.bham.ac.uk Mon Jan 7 17:48:26 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Mon, 7 Jan 2019 16:48:26 +0000 Subject: [Agda] dependency graph Message-ID: <0da21788-d5d3-5623-e158-207b0aff7c75@cs.bham.ac.uk> Is there a way to get a dependency graph of all (global) defined names in a set of Agda files? Thanks, Martin From nad at cse.gu.se Mon Jan 7 19:02:55 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 7 Jan 2019 19:02:55 +0100 Subject: [Agda] dependency graph In-Reply-To: <0da21788-d5d3-5623-e158-207b0aff7c75@cs.bham.ac.uk> References: <0da21788-d5d3-5623-e158-207b0aff7c75@cs.bham.ac.uk> Message-ID: On 07/01/2019 17.48, Martin Escardo wrote: > Is there a way to get a dependency graph of all (global) defined names > in a set of Agda files? Yes, for instance by editing the Agda source code and adding such a feature. The logic for the current --dependency-graph option is implemented mainly in Agda.Interaction.Highlighting.Dot. I assume that it would be fairly easy to construct a similar feature that worked on the level of top-level definitions instead of top-level modules. Do you want to look at the dependency graph, or do you want to query it? -- /NAD From m.escardo at cs.bham.ac.uk Mon Jan 7 21:14:34 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Mon, 7 Jan 2019 20:14:34 +0000 Subject: [Agda] dependency graph In-Reply-To: References: <0da21788-d5d3-5623-e158-207b0aff7c75@cs.bham.ac.uk> Message-ID: <49501d80-c6e7-ff2c-75c2-b6cb1ae82a33@cs.bham.ac.uk> On 07/01/2019 18:02, nad at cse.gu.se wrote: > On 07/01/2019 17.48, Martin Escardo wrote: >> Is there a way to get a dependency graph of all (global) defined names >> in a set of Agda files? > > Yes, for instance by editing the Agda source code and adding such a > feature. The logic for the current --dependency-graph option is > implemented mainly in Agda.Interaction.Highlighting.Dot. Interesting. I indeed tried to inspect the source code to try to find this, but I didn't occur to me to look at Interaction. Is there a resource that explains the architecture of the Agda implementation? I tried to find this, too. > I assume that > it would be fairly easy to construct a similar feature that worked on > the level of top-level definitions instead of top-level modules. Great. > Do you want to look at the dependency graph, or do you want to query it? I want to query it, but I know how to do this if I have the graph (e.g. in dot format), although it would be great if the Agda framework had some tools, particularly in the interactive mode, to ask some questions about this graph. At the moment, I would benefit from this for three mathematical papers I am writing based on a single Agda code base. Manual inspection is tedious and prone incompleteness. Martin > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From diaa6510 at gmail.com Tue Jan 8 04:48:09 2019 From: diaa6510 at gmail.com (Deyaaeldeen) Date: Mon, 7 Jan 2019 22:48:09 -0500 Subject: [Agda] Unification failure when using Pointwise-length Message-ID: Hello, I want to use the fact that two lists have the same length if they are Pointwise, witnessed by the Pointwise-length function. However, Agda complains about the constructor refl at line 51 in the self-contained agda file located here: https://gist.github.com/deyaaeldeen/1fbc17082f6af8c2d3e45849abacdd51 Your input is much appreciated. Deyaa -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Tue Jan 8 05:05:23 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Tue, 8 Jan 2019 06:05:23 +0200 Subject: [Agda] Unification failure when using Pointwise-length In-Reply-To: References: Message-ID: You can try this function : ``` failed : ? {?' ? t} ? t ? ? ? ?' ?? ? ? Type failed {?'} mem prec with length ?' | ??-length prec failed {?'} mem prec | _ | refl = {!!} ``` On Tue, Jan 8, 2019 at 5:48 AM Deyaaeldeen wrote: > Hello, > > I want to use the fact that two lists have the same length if they are > Pointwise, witnessed by the Pointwise-length function. However, Agda > complains about the constructor refl at line 51 in the > self-contained agda file located here: > https://gist.github.com/deyaaeldeen/1fbc17082f6af8c2d3e45849abacdd51 > > Your input is much appreciated. > > Deyaa > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From marko at dimjasevic.net Tue Jan 8 15:17:45 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Tue, 08 Jan 2019 15:17:45 +0100 Subject: [Agda] Totality checking in Agda Message-ID: <1546957065.2978.23.camel@dimjasevic.net> Dear Agda community, Can you please point me to resources on totality checking in Agda? I'm aware of the following wiki page: https://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.Total ity -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID:???????056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From perikov at gmail.com Wed Jan 9 11:21:35 2019 From: perikov at gmail.com (Pavel Perikov) Date: Wed, 9 Jan 2019 13:21:35 +0300 Subject: [Agda] Instance search and type variables Message-ID: <7DD6642C-66B7-46D1-B275-712F2B0F5427@gmail.com> Hi everybody. I think my previous message did not get to the list. If it did please excuse the duplicate. record A : Set? where field T : Set S : Set VarRelated : Set ? Set ? Set instance inst? : Related T S -- this works inst? : VarRelated T S -- but this fails with a bit misleading message "Terms marked as eligible for instance search should end with a name" I failed to find any references for this behaviour. Can anyone explain while declaring inst? is prohibited? Any input is appreciated. Best regards, Pavel From Graham.Hutton at nottingham.ac.uk Wed Jan 9 11:52:20 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Wed, 9 Jan 2019 10:52:20 +0000 Subject: [Agda] Call for Papers, MPC 2019, Portugal Message-ID: <76E50D2C-090C-4CD7-824E-F6D285A71205@exmail.nottingham.ac.uk> Dear all, The next Mathematics of Program Construction (MPC) conference will be held in Portugal in October 2019, co-located with the Symposium on Formal Methods (FM). Paper submission is 3rd May 2019. Please share, and submit your best papers! Best wishes, Graham Hutton Program Chair, MPC 2019 ====================================================================== *** CALL FOR PAPERS -- MPC 2019 *** 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== TIMELINE: Abstract submission 26th April 2019 Paper submission 3rd May 2019 Author notification 14th June 2019 Camera ready copy 12th July 2019 Conference 7-9 October 2019 BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). SCOPE: MPC seeks original papers on mathematical methods and tools put to use in program construction. Topics of interest range from algorithmics to support for program construction in programming languages and systems. Typical areas include type systems, program analysis and transformation, programming language semantics, security, and program logics. The notion of a 'program' is interpreted broadly, ranging from algorithms to hardware. Theoretical contributions are welcome, provided that their relevance to program construction is clear. Reports on applications are welcome, provided that their mathematical basis is evident. We also encourage the submission of 'programming pearls' that present elegant and instructive examples of the mathematics of program construction. SUBMISSION: Submission is in two stages. Abstracts (plain text, maximum 250 words) must be submitted by 26th April 2019. Full papers (pdf, formatted using the llncs.sty style file for LaTex) must be submitted by 3rd May 2019. There is no prescribed page limit, but authors should strive for brevity. Both abstracts and papers will be submitted using EasyChair. Papers must present previously unpublished work, and not be submitted concurrently to any other publication venue. Submissions will be evaluated by the program committee according to their relevance, correctness, significance, originality, and clarity. Each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. Accepted papers must be presented in person at the conference by one of the authors. The proceedings of MPC 2019 will be published in the Lecture Notes in Computer Science (LNCS) series, as with all previous instances of the conference. Authors of accepted papers will be expected to transfer copyright to Springer for this purpose. After the conference, authors of the best papers from MPC 2019 and MPC 2015 will be invited to submit revised versions to a special issue of Science of Computer Programming (SCP). For any queries about submission please contact the program chair, Graham Hutton . KEYNOTE SPEAKERS: Assia Mahboubi INRIA, France Annabelle McIver Macquarie University, Australia PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK CONFERENE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISERS: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From icfp.publicity at googlemail.com Thu Jan 10 02:50:16 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Wed, 09 Jan 2019 20:50:16 -0500 Subject: [Agda] Second Call for Papers: PACMPL issue ICFP 2019 Message-ID: <5c36a4d82961d_64534650dc173eb@hermes.mail> PACMPL Volume 3, Issue ICFP 2019 Call for Papers accepted papers to be invited for presentation at The 24th ACM SIGPLAN International Conference on Functional Programming Berlin, Germany http://icfp19.sigplan.org/ ### Important dates Submissions due: 1 March 2019 (Friday) Anywhere on Earth https://icfp19.hotcrp.com Author response: 16 April (Tuesday) - 18 Apri (Friday) 14:00 UTC Notification: 3 May (Friday) Final copy due: 22 June (Saturday) Conference: 18 August (Sunday) - 23 August (Friday) ### About PACMPL Proceedings of the ACM on Programming Languages (PACMPL ) is a Gold Open Access journal publishing research on all aspects of programming languages, from design to implementation and from mathematical formalisms to empirical studies. Each issue of the journal is devoted to a particular subject area within programming languages and will be announced through publicized Calls for Papers, like this one. ### Scope [PACMPL](https://pacmpl.acm.org/) issue ICFP 2019 seeks original papers on the art and science of functional programming. Submissions are invited on all topics from principles to practice, from foundations to features, and from abstraction to application. The scope includes all languages that encourage functional programming, including both purely applicative and imperative languages, as well as languages with objects, concurrency, or parallelism. Topics of interest include (but are not limited to): * *Language Design*: concurrency, parallelism, and distribution; modules; components and composition; metaprogramming; type systems; interoperability; domain-specific languages; and relations to imperative, object-oriented, or logic programming. * *Implementation*: abstract machines; virtual machines; interpretation; compilation; compile-time and run-time optimization; garbage collection and memory management; multi-threading; exploiting parallel hardware; interfaces to foreign functions, services, components, or low-level machine resources. * *Software-Development Techniques*: algorithms and data structures; design patterns; specification; verification; validation; proof assistants; debugging; testing; tracing; profiling. * *Foundations*: formal semantics; lambda calculus; rewriting; type theory; monads; continuations; control; state; effects; program verification; dependent types. * *Analysis and Transformation*: control-flow; data-flow; abstract interpretation; partial evaluation; program calculation. * *Applications*: symbolic computing; formal-methods tools; artificial intelligence; systems programming; distributed-systems and web programming; hardware design; databases; XML processing; scientific and numerical computing; graphical user interfaces; multimedia and 3D graphics programming; scripting; system administration; security. * *Education*: teaching introductory programming; parallel programming; mathematical proof; algebra. Submissions will be evaluated according to their relevance, correctness, significance, originality, and clarity. Each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. The technical content should be accessible to a broad audience. PACMPL issue ICFP 2019 also welcomes submissions in two separate categories — Functional Pearls and Experience Reports — that must be marked as such at the time of submission and that need not report original research results. Detailed guidelines on both categories are given at the end of this call. Please contact the principal editor if you have questions or are concerned about the appropriateness of a topic. ### Preparation of submissions **Deadline**: The deadline for submissions is **Friday, March 1, 2019**, Anywhere on Earth (). This deadline will be strictly enforced. **Formatting**: Submissions must be in PDF format, printable in black and white on US Letter sized paper, and interpretable by common PDF tools. All submissions must adhere to the "ACM Small" template that is available (in both LaTeX and Word formats) from . For authors using LaTeX, a lighter-weight package, including only the essential files, is available from . There is a limit of **25 pages for a full paper or Functional Pearl** and **12 pages for an Experience Report**; in either case, the bibliography will not be counted against these limits. Submissions that exceed the page limits or, for other reasons, do not meet the requirements for formatting, will be summarily rejected. Supplementary material can and should be **separately** submitted (see below). See also PACMPL's Information and Guidelines for Authors at . **Submission**: Submissions will be accepted at Improved versions of a paper may be submitted at any point before the submission deadline using the same web interface. **Author Response Period**: Authors will have a 72-hour period, starting at 14:00 UTC on **Tuesday, April 16, 2019**, to read reviews and respond to them. **Supplementary Material**: Authors have the option to attach supplementary material to a submission, on the understanding that reviewers may choose not to look at it. This supplementary material should **not** be submitted as part of the main document; instead, it should be uploaded as a **separate** PDF document or tarball. Supplementary material should be uploaded **at submission time**, not by providing a URL in the paper that points to an external repository. Authors are free to upload both anonymized and non-anonymized supplementary material. Anonymized supplementary material will be visible to reviewers immediately; non-anonymized supplementary material will be revealed to reviewers only after they have submitted their review of the paper and learned the identity of the author(s). **Authorship Policies**: All submissions are expected to comply with the ACM Policies for Authorship that are detailed at . **Republication Policies**: Each submission must adhere to SIGPLAN's republication policy, as explained on the web at . **Resubmitted Papers**: Authors who submit a revised version of a paper that has previously been rejected by another conference have the option to attach an annotated copy of the reviews of their previous submission(s), explaining how they have addressed these previous reviews in the present submission. If a reviewer identifies him/herself as a reviewer of this previous submission and wishes to see how his/her comments have been addressed, the principal editor will communicate to this reviewer the annotated copy of his/her previous review. Otherwise, no reviewer will read the annotated copies of the previous reviews. ### Review Process This section outlines the two-stage process with lightweight double-blind reviewing that will be used to select papers for PACMPL issue ICFP 2019. We anticipate that there will be a need to clarify and expand on this process, and we will maintain a list of frequently asked questions and answers on the conference website to address common concerns. **PACMPL issue ICFP 2019 will employ a two-stage review process.** The first stage in the review process will assess submitted papers using the criteria stated above and will allow for feedback and input on initial reviews through the author response period mentioned previously. At the review meeting, a set of papers will be conditionally accepted and all other papers will be rejected. Authors will be notified of these decisions on **May 3, 2019**. Authors of conditionally accepted papers will be provided with committee reviews (just as in previous conferences) along with a set of mandatory revisions. After four weeks (May 31, 2019), the authors will provide a second submission. The second and final reviewing phase assesses whether the mandatory revisions have been adequately addressed by the authors and thereby determines the final accept/reject status of the paper. The intent and expectation is that the mandatory revisions can be addressed within four weeks and hence that conditionally accepted papers will in general be accepted in the second phase. The second submission should clearly identify how the mandatory revisions were addressed. To that end, the second submission must be accompanied by a cover letter mapping each mandatory revision request to specific parts of the paper. The cover letter will facilitate a quick second review, allowing for confirmation of final acceptance within two weeks. Conversely, the absence of a cover letter will be grounds for the paper?s rejection. **PACMPL issue ICFP 2019 will employ a lightweight double-blind reviewing process.** To facilitate this, submitted papers must adhere to two rules: 1. **author names and institutions must be omitted**, and 2. **references to authors' own related work should be in the third person** (e.g., not "We build on our previous work ..." but rather "We build on the work of ..."). The purpose of this process is to help the reviewers come to an initial judgement about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult (e.g., important background references should not be omitted or anonymized). In addition, authors should feel free to disseminate their ideas or draft versions of their paper as they normally would. For instance, authors may post drafts of their papers on the web or give talks on their research ideas. ### Information for Authors of Accepted Papers * As a condition of acceptance, final versions of all papers must adhere to the new ACM Small format. The page limit for the final versions of papers will be increased by two pages to help authors respond to reviewer comments and mandatory revisions: **27 pages plus bibliography for a regular paper or Functional Pearl, 14 pages plus bibliography for an Experience Report**. * Authors of accepted submissions will be required to agree to one of the three ACM licensing options: open access on payment of a fee (**recommended**, and SIGPLAN can cover the cost as described next); copyright transfer to ACM; or retaining copyright but granting ACM exclusive publication rights. Further information about ACM author rights is available from . * PACMPL is a Gold Open Access journal. It will be archived in ACM?s Digital Library, but no membership or fee is required for access. Gold Open Access has been made possible by generous funding through ACM SIGPLAN, which will cover all open access costs in the event authors cannot. Authors who can cover the costs may do so by paying an Article Processing Charge (APC). PACMPL, SIGPLAN, and ACM Headquarters are committed to exploring routes to making Gold Open Access publication both affordable and sustainable. * ACM offers authors a range of copyright options, one of which is Creative Commons CC-BY publication; this is the option recommended by the PACMPL editorial board. A reasoned argument in favour of this option can be found in the article [Why CC-BY?](https://oaspa.org/why-cc-by/) published by OASPA, the Open Access Scholarly Publishers Association. * We intend that the papers will be freely available for download from the ACM Digital Library in perpetuity via the OpenTOC mechanism. * ACM Author-Izer is a unique service that enables ACM authors to generate and post links on either their home page or institutional repository for visitors to download the definitive version of their articles from the ACM Digital Library at no charge. Downloads through Author-Izer links are captured in official ACM statistics, improving the accuracy of usage and impact measurements. Consistently linking to the definitive version of an ACM article should reduce user confusion over article versioning. After an article has been published and assigned to the appropriate ACM Author Profile pages, authors should visit to learn how to create links for free downloads from the ACM DL. * At least one author of each accepted submissions will be expected to attend and present their paper at the conference. The schedule for presentations will be determined and shared with authors after the full program has been selected. Presentations will be videotaped and released online if the presenter consents. * The official publication date is the date the papers are made available in the ACM Digital Library. This date may be up to *two weeks prior* to the first day of the conference. The official publication date affects the deadline for any patent filings related to published work. ### Artifact Evaluation Authors of papers that are conditionally accepted in the first phase of the review process will be encouraged (but not required) to submit supporting materials for Artifact Evaluation. These items will then be reviewed by an Artifact Evaluation Committee, separate from the paper Review Committee, whose task is to assess how the artifacts support the work described in the associated paper. Papers that go through the Artifact Evaluation process successfully will receive a seal of approval printed on the papers themselves. Authors of accepted papers will be encouraged to make the supporting materials publicly available upon publication of the papers, for example, by including them as "source materials" in the ACM Digital Library. An additional seal will mark papers whose artifacts are made available, as outlined in the ACM guidelines for artifact badging. Participation in Artifact Evaluation is voluntary and will not influence the final decision regarding paper acceptance. ### Special categories of papers In addition to research papers, PACMPL issue ICFP solicits two kinds of papers that do not require original research contributions: Functional Pearls, which are full papers, and Experience Reports, which are limited to half the length of a full paper. Authors submitting such papers should consider the following guidelines. #### Functional Pearls A Functional Pearl is an elegant essay about something related to functional programming. Examples include, but are not limited to: * a new and thought-provoking way of looking at an old idea * an instructive example of program calculation or proof * a nifty presentation of an old or new data structure * an interesting application of functional programming techniques * a novel use or exposition of functional programming in the classroom While pearls often demonstrate an idea through the development of a short program, there is no requirement or expectation that they do so. Thus, they encompass the notions of theoretical and educational pearls. Functional Pearls are valued as highly and judged as rigorously as ordinary papers, but using somewhat different criteria. In particular, a pearl is not required to report original research, but, it should be concise, instructive, and entertaining. A pearl is likely to be rejected if its readers get bored, if the material gets too complicated, if too much specialized knowledge is needed, or if the writing is inelegant. The key to writing a good pearl is polishing. A submission that is intended to be treated as a pearl must be marked as such on the submission web page, and should contain the words "Functional Pearl" somewhere in its title or subtitle. These steps will alert reviewers to use the appropriate evaluation criteria. Pearls will be combined with ordinary papers, however, for the purpose of computing the conference's acceptance rate. #### Experience Reports The purpose of an Experience Report is to help create a body of published, refereed, citable evidence that functional programming really works — or to describe what obstacles prevent it from working. Possible topics for an Experience Report include, but are not limited to: * insights gained from real-world projects using functional programming * comparison of functional programming with conventional programming in the context of an industrial project or a university curriculum * project-management, business, or legal issues encountered when using functional programming in a real-world project * curricular issues encountered when using functional programming in education * real-world constraints that created special challenges for an implementation of a functional language or for functional programming in general An Experience Report is distinguished from a normal PACMPL issue ICFP paper by its title, by its length, and by the criteria used to evaluate it. * Both in the papers and in any citations, the title of each accepted Experience Report must end with the words "(Experience Report)" in parentheses. The acceptance rate for Experience Reports will be computed and reported separately from the rate for ordinary papers. * Experience Report submissions can be at most 12 pages long, excluding bibliography. * Each accepted Experience Report will be presented at the conference, but depending on the number of Experience Reports and regular papers accepted, authors of Experience reports may be asked to give shorter talks. * Because the purpose of Experience Reports is to enable our community to accumulate a body of evidence about the efficacy of functional programming, an acceptable Experience Report need not add to the body of knowledge of the functional-programming community by presenting novel results or conclusions. It is sufficient if the Report states a clear thesis and provides supporting evidence. The thesis must be relevant to ICFP, but it need not be novel. The review committee will accept or reject Experience Reports based on whether they judge the evidence to be convincing. Anecdotal evidence will be acceptable provided it is well argued and the author explains what efforts were made to gather as much evidence as possible. Typically, more convincing evidence is obtained from papers which show how functional programming was used than from papers which only say that functional programming was used. The most convincing evidence often includes comparisons of situations before and after the introduction or discontinuation of functional programming. Evidence drawn from a single person's experience may be sufficient, but more weight will be given to evidence drawn from the experience of groups of people. An Experience Report should be short and to the point: it should make a claim about how well functional programming worked on a particular project and why, and produce evidence to substantiate this claim. If functional programming worked in this case in the same ways it has worked for others, the paper need only summarize the results — the main part of the paper should discuss how well it worked and in what context. Most readers will not want to know all the details of the project and its implementation, but the paper should characterize the project and its context well enough so that readers can judge to what degree this experience is relevant to their own projects. The paper should take care to highlight any unusual aspects of the project. Specifics about the project are more valuable than generalities about functional programming; for example, it is more valuable to say that the team delivered its software a month ahead of schedule than it is to say that functional programming made the team more productive. If the paper not only describes experience but also presents new technical results, or if the experience refutes cherished beliefs of the functional-programming community, it may be better to submit it as a full paper, which will be judged by the usual criteria of novelty, originality, and relevance. The principal editor will be happy to advise on any concerns about which category to submit to. ### ICFP Organizers General Chair: Derek Dreyer (MPI-SWS, Germany) Artifact Evaluation Co-Chairs: Simon Marlow (Facebook, UK) Industrial Relations Chair: Alan Jeffrey (Mozilla Research, USA) Programming Contest Organiser: Ilya Sergey (Yale-NUS College, Singapore) Publicity and Web Chair: Sam Tobin-Hochstadt (Indiana University, USA) Student Research Competition Chair: William J. Bowman (University of British Columbia, Canada) Workshops Co-Chair: Christophe Scholliers (Universiteit Gent, Belgium) Jennifer Hackett (University of Nottingham, UK) Conference Manager: Annabel Satin (P.C.K.) ### PACMPL Volume 3, Issue ICFP 2019 Principal Editor: Fran?ois Pottier (Inria, France) Review Committee: Lennart Beringer (Princeton University, United States) Joachim Breitner (DFINITY Foundation, Germany) Laura M. Castro (University of A Coru?a, Spain) Ezgi ?i?ek (Facebook London, United Kingdom) Pierre-Evariste Dagand (LIP6/CNRS, France) Christos Dimoulas (Northwestern University, United States) Jacques-Henri Jourdan (CNRS, LRI, Universit? Paris-Sud, France) Andrew Kennedy (Facebook London, United Kingdom) Daan Leijen (Microsoft Research, United States) Kazutaka Matsuda (Tohoku University, Japan) Bruno C. d. S. Oliveira (University of Hong Kong, China) Klaus Ostermann (University of T?bingen, Germany) Jennifer Paykin (Galois, United States) Frank Pfenning (Carnegie Mellon University, USA) Mike Rainey (Indiana University, USA) Chung-chieh Shan (Indiana University, USA) Sam Staton (University of Oxford, UK) Pierre-Yves Strub (Ecole Polytechnique, France) German Vidal (Universitat Politecnica de Valencia, Spain) External Review Committee: Michael D. Adams (University of Utah, USA) Robert Atkey (University of Strathclyde, IK) Sheng Chen (University of Louisiana at Lafayette, USA) James Cheney (University of Edinburgh, UK) Adam Chlipala (Massachusetts Institute of Technology, USA) Evelyne Contejean (LRI, Universit? Paris-Sud, France) Germ?n Andr?s Delbianco (IRIF, Universit? Paris Diderot, France) Dominique Devriese (Vrije Universiteit Brussel, Belgium) Richard A. Eisenberg (Bryn Mawr College, USA) Conal Elliott (Target, USA) Sebastian Erdweg (Delft University of Technology, Netherlands) Michael Greenberg (Pomona College, USA) Adrien Guatto (IRIF, Universit? Paris Diderot, France) Jennifer Hackett (University of Nottingham, UK) Troels Henriksen (University of Copenhagen, Denmark) Chung-Kil Hur (Seoul National University, Republic of Korea) Roberto Ierusalimschy (PUC-Rio, Brazil) Ranjit Jhala (University of California, San Diego, USA) Ralf Jung (MPI-SWS, Germany) Ohad Kammar (University of Oxford, UK) Oleg Kiselyov (Tohoku University, Japan) Hsiang-Shang ?Josh? Ko (National Institute of Informatics, Japan) Ond?ej Lhot?k (University of Waterloo, Canada) Dan Licata (Wesleyan University, USA) Geoffrey Mainland (Drexel University, USA) Simon Marlow (Facebook, UK) Akimasa Morihata (University of Tokyo, Japan) Shin-Cheng Mu (Academia Sinica, Taiwan) Guillaume Munch-Maccagnoni (Inria, France) Kim Nguy?n (University of Paris-Sud, France) Ulf Norell (Gothenburg University, Sweden) Atsushi Ohori (Tohoku University, Japan) Rex Page (University of Oklahoma, USA) Zoe Paraskevopoulou (Princeton University, USA) Nadia Polikarpova (University of California, San Diego, USA) Jonathan Protzenko (Microsoft Research, USA) Tiark Rompf (Purdue University, USA) Andreas Rossberg (Dfinity, Germany) KC Sivaramakrishnan (University of Cambridge, UI) Nicholas Smallbone (Chalmers University of Technology, Sweden) Matthieu Sozeau (Inria, France) Sandro Stucki (Chalmers | University of Gothenburg, Sweden) Don Syme (Microsoft, UK) Zachary Tatlock (University of Washington, USA) Sam Tobin-Hochstadt (Indiana University, USA) Takeshi Tsukada (University of Tokyo, Japan) Tarmo Uustalu (Reykjavik University, Iceland) Benoit Valiron (LRI, CentraleSupelec, Univ. Paris Saclay, France) Daniel Winograd-Cort (University of Pennsylvania, USA) Nicolas Wu (University of Bristol, UK) From nad at cse.gu.se Thu Jan 10 11:43:30 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 10 Jan 2019 11:43:30 +0100 Subject: [Agda] Instance search and type variables In-Reply-To: <7DD6642C-66B7-46D1-B275-712F2B0F5427@gmail.com> References: <7DD6642C-66B7-46D1-B275-712F2B0F5427@gmail.com> Message-ID: On 09/01/2019 11.21, Pavel Perikov wrote: > Can anyone explain while declaring inst? is prohibited? See the reference manual: https://agda.readthedocs.io/en/latest/language/instance-arguments.html#declaring-instances -- /NAD From W.S.Swierstra at uu.nl Tue Jan 15 12:01:09 2019 From: W.S.Swierstra at uu.nl (Swierstra, W.S. (Wouter)) Date: Tue, 15 Jan 2019 11:01:09 +0000 Subject: [Agda] Vacancies for six Assistant Professor positions at Utrecht University Message-ID: <20190115110107.GG8997@x1> We are currently advertising vacancies for 6 Assistant Professors in Information and Computing Sciences (Tenure Track 0.8 - 1.0 FTE) We are particularly interested in candidates with expertise in functional programming, (automated) theorem proving and interactive proof assistants. # Job description Due to our successful teaching programmes and our ambitions in research, the Department of Information and Computing Sciences is expanding. We are therefore actively searching for six motivated, ambitious Assistant Professors in Information and Computing Sciences. Please note that positions offered will vary, depending on experience and expertise. You have a background in Computing and Information Sciences, preferably in the areas of Information Science, Artificial Intelligence, Data Science, Algorithms, Software, Computer Science Education and Process Management and Analytics. Excellent candidates with other areas of expertise related to our current research groups and teaching programmes are also invited to apply. You have proven ambition and talent for research. As teaching is an important and satisfying part of our work, we are searching for people with a demonstrable motivation to teach. The Department is expanding and provides a dynamic work environment. If you are excited to actively participate in shaping the department, you are very welcome to apply. One PhD candidate will be funded for you by the Department in order to start up your research. # Qualifications We are looking for 6 Assistant Professors. Ideally your eligibility is exemplified by an excellent track record in teaching and research. ## Research * PhD in Computer Science, Information Science or another relevant discipline; * international publications in leading conferences and journals; * experience with or good prospects for acquiring external research funds; * vision on future research directions in own area of expertise; * experience with or readiness to supervise PhD projects; * active role in international scientific communities. ## Teaching * experience with and enthusiasm for teaching and student supervision; * ability to teach in departmental BSc and MSc programmes; * well-developed didactic skills; * excellent command of the English language; * experience with or willingness to use innovative teaching methods and (e-learning) technologies; * vision on teaching and your own contribution to teaching. Please note that we are also interested in candidates with a focus on teaching. ## Leadership: * play an active and cooperative role in the department and the university; * willingness to organize scientific events, such as research seminars or teaching seminars; * willingness to partake in departmental committees. The department finds gender balance specifically and diversity in a broader sense very important. In recent procedures we attracted a significant number of women (five out of 10 positions). We are very keen on appointing more female scientists and therefore strongly encourage qualified women to apply. Publication track record, teaching record, and acquired research funds will be weighed against the number of years of academic experience, also taking into account parental leave or a part-time work schedule. # Offer We offer a position of 0.8 - 1.0 FTE. The gross salary - depending on previous qualifications and experience - ranges between ?3,255 and ?5,656 (scale 10/12 according to the Collective Labour Agreement Dutch Universities) gross per month for a full-time employment. Salaries are supplemented with a holiday bonus of 8 % and a year-end bonus of 8.3 % per year. We offer a pension scheme, (partly paid) parental leave, collective insurance schemes and flexible employment conditions. Facilities for sports and child care are available on our campus, which is only 15 minutes away from the historical city center of Utrecht. We offer you the possibility to develop towards a Basic Teaching Qualification, supported with educational development programs offered by the University. We also offer candidates the possibility to travel to conferences. # About the organization A better future for everyone. This ambition motivates our scientists in executing their leading research and inspiring teaching. At Utrecht University, colleagues from various disciplines collaborate intensively towards major societal themes. Our focus is on Dynamics of Youth, Institutions for Open Societies, Life Sciences and Sustainability. The city of Utrecht is one of the oldest cities in the Netherlands, with a charming old center and an internationally oriented culture that is strongly influenced by its century-old university. Utrecht city has been consistently ranked as one of the most livable cities in the Netherlands. The Faculty of Science consists of six Departments: Biology, Pharmaceutical Sciences, Information and Computing Sciences, Physics and Astronomy, Chemistry and Mathematics. The Faculty is home to 5,900 students and nearly 1,600 staff and is internationally renowned for the quality of its research. The Faculty's academic programmes reflect developments in today's society. The Department of Information and Computing Sciences is nationally and internationally renowned for its research in Computing Science and Information Science. Current research groups are Algorithmic Data Analysis, Algorithms and Complexity, Decision Support Systems, Intelligent Systems, Simulation of Complex Systems, Multimedia, Human-Centered Computing, Geometric Computing, Process Management and Analytics, Organization and Information, Natural Language Processing, Intelligent Systems, Software Technology and Software Technology of Learning and Teaching. Relevant areas of interdisciplinary research include Game Research, Foundations of Complex Systems, Applied Data Science, Artificial Intelligence and Integrative Bioinformatics. The Department has, among others, close collaborations with the University Medical Center, the Departments of Physics and Mathematics, and the Faculties of Humanities and Geosciences. The Department offers Bachelor programmes in Computer Science and Information Science, and four English Research Master programmes in Artificial Intelligence, Business Informatics, Computing Science, and Game and Media Technology. The Department is developing Master programmes in Data Science and Interaction Technology. High enrolment figures and good student ratings make the education very successful. The Department currently comprises 15 full-time Chairs and 105 other scientific staff, including Postdocs and PhD candidates. # Additional information Would you like additional information about the vacancy? This can be obtained from Prof. van Kreveld, Research Director (M.J.vanKreveld at uu.nl) or from Marloes Reichardt-Buijs, HR Officer for the Department, (M.S.Reichardt-Buijs at uu.nl). If you have any informal enquiries about these vacancies, feel free to contact me directly. # Applying You can submit your application online through: https://bit.ly/2CZsgO6 If you prefer a part-time appointment, you are also invited to apply, preferably stating the desired part-time ratio. From apostolis.xekoukoulotakis at gmail.com Wed Jan 16 00:56:27 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Wed, 16 Jan 2019 01:56:27 +0200 Subject: [Agda] Do you use postulates extensively? Message-ID: Since now, I have spent days proving trivial mathematical propositions without knowing if the general theory/idea is correct. This, of course, means that the theory is developed while programming in Agda. It is not developed before using Agda. I am thinking of using postulates extensively and prove things on paper instead of doing it in Agda. It is less safe but much faster. Then check the validity of the main Idea with the use of the postulates. Only then try to prove some of the postulates that might be a bit tricky. At least for me, proofs that do not take part in the computation of a program can remain postulates. What is your strategy? Do you use postulates extensively? In my opinion this is important enough that it needs to be put in the documentation. I have wasted too much time proving trivial propositions and we do not have to do that. -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Wed Jan 16 11:49:00 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 16 Jan 2019 11:49:00 +0100 Subject: [Agda] Do you use postulates extensively? In-Reply-To: References: Message-ID: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> On 16/01/2019 00.56, Apostolis Xekoukoulotakis wrote: > Do you use postulates extensively? No, but I can imagine that this depends on what you are working on. If your subject of study depends on a lot of prior, very solid work, then it might make sense to use postulates. When I prove something under an assumption that cannot be proven (say, "assuming equality of functions is extensional?") I have found it useful to state the assumption explicitly rather than using postulates. This makes it easy to track exactly what parts of the development depend on what assumptions. -- /NAD From david.nowak at univ-lille.fr Wed Jan 16 13:40:44 2019 From: david.nowak at univ-lille.fr (David Nowak) Date: Wed, 16 Jan 2019 13:40:44 +0100 Subject: [Agda] ENTROPY 2019: Call for Papers - Co-located with EuroS&P'19 Message-ID: <02BCCCAE-5693-4C7F-B6CA-CB1E6EA7BEA5@univ-lille.fr> ************************************************************************** Call for papers ? ENTROPY 2019 ENabling TRust through Os Proofs ? and beYond Second International workshop on the use of theorem provers for modelling and verification at the hardware-software interface Co-located with EuroS&P'19, KTH, Stockholm, June 2019 ************************************************************************** AIM AND SCOPE Low level software such as kernels and drivers, along with the hardware this software runs on, is critical for application security. In contrast with user applications, OS kernel software runs in privileged CPU mode and is thus highly critical. Large projects such as seL4, VeriSoft, CertiKoS and Prosper have invested considerable resources in developing formally verified systems such as hypervisors and microkernels, supplying proofs that they satisfy critical properties. Such proofs are delicate in terms of the scale and complexity of real systems, the models used in performing the proof search, and the relations between the two, which recent vulnerabilities such as Spectre and Meltdown have shown to be a highly non-trivial issue. The purpose of this workshop is to share, compare and disseminate best practices, tools and methodologies to verify OS kernels, also setting the stage for future steps in the direction of fully verified systems, dealing with issues related to modelling, model validation, and large proof maintenance through system evolution. On one hand, we need to make low-level proofs more scalable, modular and cost-effective. On the other hand, once certified systems are available, preservation and maintenance of their proofs of validity become key questions. The goal of the ENTROPY workshop is to provide a forum for researchers and practitioners in this space, linking operating systems, formal methods, and hardware architecture, interested in system design as well as machine verified mathematical proofs using proof assistants such as Coq, Isabelle and HOL4. This will be the second edition of the ENTROPY workshop series. The first workshop was organised by the Pip Development Team at University of Lille in 2018. TOPICS OF INTEREST Specific topics include, but are not limited to: * Verified kernels and hypervisors * Verified security architectures and models * Tools and frameworks for hardware security analysis * Tools and frameworks for security analysis * Formal hardware models and model validation techniques * Theorem prover based tools and frameworks for verification of low level code * Combinations of static analysis and theorem proving * Theories and techniques for compositional security analysis * Case studies and industrial experience reports * Proof maintenance techniques and problems * Compositional models and verification techniques * Proof oriented design The aim of the workshop is to stimulate innovation and active exchange of ideas, so position papers, work-in-progress and industrial experience submissions are welcome. INVITED SPEAKERS (to be extended) Frank Piessens, KU Leuven Peter Sewell, Univ. Cambridge IMPORTANT DATES Paper submission: March 11 2019 Author notification: April 10, 2019 Camera-ready versions: April 22, 2019 (strict) Workshop: 16 June 2019 SUBMISSION AND PUBLICATION There are two categories of submissions: 1. Regular papers describing fully developed work and complete results (10 pages, references included, IEEE format) 2. Short papers, position papers, industry experience reports, work-in-progress submissions: (4 pages, references included, IEEE format) All papers should be in English and describe original work that has not been published or submitted elsewhere. The submission category should be clearly indicated. All submissions will be fully reviewed by members of the Programme Committee. Papers will appear in IEEE Xplore in a companion volume to the regular EuroS&P proceedings. For formatting and submission instructions see https://entropy2019.sciencesconf.org. PROGRAM CHAIRS Mads Dam, KTH Royal Institute of Technology David Nowak, CNRS and University of Lille PROGRAM COMMITTEE Christoph Baumann, Ericsson AB Gustavo Betarte, Univ. de la Rep?blica, Uruguay David Cock, ETH Zurich Mads Dam, KTH Royal Institute of Technology (chair) Anthony Fox, ARM Deepak Garg, MPI Saarbrucken Ronghui Gu, Columbia University Samuel Hym, Univ. Lille Thomas Jensen, INRIA and Univ. Rennes Toby Murray, Univ. Melbourne David Nowak, CNRS & Univ. Lille (chair) Vicente Sanchez-Leighton, Orange Labs Thomas Sewell, Chalmers ? David Nowak http://www.cristal.univ-lille.fr/~nowakd/ From apostolis.xekoukoulotakis at gmail.com Wed Jan 16 15:01:25 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Wed, 16 Jan 2019 16:01:25 +0200 Subject: [Agda] Do you use postulates extensively? In-Reply-To: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> References: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> Message-ID: Mathematics has used informal proofs for thousands of years, and this is why we made progress because the cost of a formal proof is enormous. Why then use agda? Because types can guide the implementation of parts that are important or are part of the computational path. The question then is to find the correct strategy: A) Informally prove a proposition and put explicitly the postulate assumptions in the type. Have a secondary proposition without those assumptions. This is the one to be used by the other proofs. B) One could use type variables to imitate the traditional informal way of proving. ("Because of theorem1.1 , lemma2.4 etc.") C) Avoid proofs inside the types as much as possible, use abstraction if the proof is used in the arguments and existential quantification if it is used in the type of the result. The question then becomes how to limit the effects of a failure of a proof of a proposition. Will the effects cascade to the all the remaining proofs? Many times , the failure can be local and mitigated with a fix. In others, the effect is catastrophic. For example, Shinichi Mochizuki's proof of the abc conjecture could be wrong because of the incorrectness of a corollary. Given that the theory is thousands of pages and many years of work, this will certainly be a catastrophic failure if one is not able to replace that proposition with something else. Is the cascading effect of a wrong agda proposition bigger than in an informal mathematical setting? What are your strategies in mitigating it assuming that you use postulates? On Wed, Jan 16, 2019 at 12:49 PM Nils Anders Danielsson wrote: > On 16/01/2019 00.56, Apostolis Xekoukoulotakis wrote: > > Do you use postulates extensively? > > No, but I can imagine that this depends on what you are working on. If > your subject of study depends on a lot of prior, very solid work, then > it might make sense to use postulates. > > When I prove something under an assumption that cannot be proven (say, > "assuming equality of functions is extensional?") I have found it useful > to state the assumption explicitly rather than using postulates. This > makes it easy to track exactly what parts of the development depend on > what assumptions. > > -- > /NAD > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Jan 17 14:13:46 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 17 Jan 2019 16:13:46 +0300 Subject: [Agda] Do you use postulates extensively? In-Reply-To: References: Message-ID: <1547730826.22187.26.camel@scico.botik.ru> On Wed, 2019-01-16 at 01:56 +0200, Apostolis Xekoukoulotakis wrote: > Since now, I have spent days proving trivial mathematical propositions > without knowing if the general theory/idea is correct. > > > This, of course, means that the theory is developed while programming > in Agda. It is not developed before using Agda. > > > I am thinking of using postulates extensively and prove things on > paper instead of doing it in Agda. > It is less safe but much faster. Then check the validity of the main > Idea with the use of the postulates. Only then try to prove some of > the postulates that might be a bit tricky. > > > At least for me, proofs that do not take part in the computation of a > program can remain postulates. > > > What is your strategy? Do you use postulates extensively? In my > opinion this is important enough that it needs to be put in the > documentation. I have wasted too much time proving trivial > propositions and we do not have to do that. > Usually I postulate simple lemmas of which I am sure that I can prove them in Agda. I move fast to the final goal. If fail with this final goal, then one can forget of those lemmas. And if the goal is proved, I return to proving those lemmas in Agda. Formal proofs are difficult. Still setting postulates is dangerous. Consider the problem: (given a prime number p, find any prime number q greater than p. Many people suggest: Method: let A = product [p' | prime p', p' <= p] in 1 + A and think that 1+A is the needed prime. I also thought this way, and postulated this, and continued. Then, I returned to a formal proof for Method. And discovered that I fail to prove it. Then I discovered a counter-example: 2*3*5*...*13 + 1 -- something of this sort. There were more simple cases when my postulate occurred wrong. Another example of using Agda proofs. I "developed" a certain factorization theory for cancellative commutative monoids, with definitions, and so on, because it looks as trivial. To make sure that I have not mistakes there, I proved all the lemmata in Agda. Then I looked into the book of Jacobson, and observed there all my definitions and lemmas. If there was not such a book, Agda could essentially help. And even without proofs, dependent types are important. They provide an adequate programming language for representing algebraic classes and domains. -- SM From apostolis.xekoukoulotakis at gmail.com Thu Jan 17 17:39:49 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Thu, 17 Jan 2019 18:39:49 +0200 Subject: [Agda] Do you use postulates extensively? In-Reply-To: <1547730826.22187.26.camel@scico.botik.ru> References: <1547730826.22187.26.camel@scico.botik.ru> Message-ID: I am not saying not to prove things but to choose the granularity of the proof in the same way that pen&paper proofs allows us to do. I am interested in a granularity that would make the proof acceptable in the math community and nothing more. It is very important to falsify propositions as fast as possible and postulating trivialities is the way to do it. All this assumes that you develop the theory while you use Agda. On Thu, Jan 17, 2019 at 3:48 PM Sergei Meshveliani wrote: > On Wed, 2019-01-16 at 01:56 +0200, Apostolis Xekoukoulotakis wrote: > > Since now, I have spent days proving trivial mathematical propositions > > without knowing if the general theory/idea is correct. > > > > > > This, of course, means that the theory is developed while programming > > in Agda. It is not developed before using Agda. > > > > > > I am thinking of using postulates extensively and prove things on > > paper instead of doing it in Agda. > > It is less safe but much faster. Then check the validity of the main > > Idea with the use of the postulates. Only then try to prove some of > > the postulates that might be a bit tricky. > > > > > > At least for me, proofs that do not take part in the computation of a > > program can remain postulates. > > > > > > What is your strategy? Do you use postulates extensively? In my > > opinion this is important enough that it needs to be put in the > > documentation. I have wasted too much time proving trivial > > propositions and we do not have to do that. > > > > > Usually I postulate simple lemmas of which I am sure that I can prove > them in Agda. I move fast to the final goal. If fail with this final > goal, then one can forget of those lemmas. > And if the goal is proved, I return to proving those lemmas in Agda. > Formal proofs are difficult. > > Still setting postulates is dangerous. > Consider the problem: > (given a prime number p, find any prime number q greater than p. > > Many people suggest: > Method: > let A = product [p' | prime p', p' <= p] > in 1 + A > > and think that 1+A is the needed prime. > I also thought this way, and postulated this, and continued. > Then, I returned to a formal proof for Method. > And discovered that I fail to prove it. > Then I discovered a counter-example: 2*3*5*...*13 + 1 > -- something of this sort. > > There were more simple cases when my postulate occurred wrong. > > Another example of using Agda proofs. > I "developed" a certain factorization theory for cancellative > commutative monoids, with definitions, and so on, because it looks as > trivial. > To make sure that I have not mistakes there, I proved all the lemmata in > Agda. Then I looked into the book of Jacobson, and observed there all my > definitions and lemmas. If there was not such a book, Agda could > essentially help. > > And even without proofs, dependent types are important. > They provide an adequate programming language for representing algebraic > classes and domains. > > -- > SM > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Fri Jan 18 12:36:06 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 18 Jan 2019 14:36:06 +0300 Subject: [Agda] Do you use postulates extensively? In-Reply-To: References: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> Message-ID: <1547811366.2314.39.camel@one.mechvel.pereslavl.ru> On Wed, 2019-01-16 at 16:01 +0200, Apostolis Xekoukoulotakis wrote: > Mathematics has used informal proofs for thousands of years, and this > is why we made progress because the cost of a formal proof is > enormous. The cost of each new formal proof is reduced greatly when one uses a large library of theorems proved formally earlier, when this library is designed for the corresponding subject domain. This is similar as with humanly proofs. One accumulates a library during a couple of years, and then one feels, that formal proofs become easier. Still the cost remains great. > Why then use agda? So far I see only the four reasons. (1) Dependent types support an adequate domain representation in mathematics -- apart from possibility of formal proofs. (2) Informal proofs often have mistakes (I have shown an example earlier). (3) For curiosity: to play with formalism, to see which theorems can in reality be proved formally, what resource will it take. For what aim, I do not know. (4) A proof design in Agda is an important area of application for automatic provers. The more powerful prover is the more proof assistance Agda will provide when a program uses this prover in its library. So far, provers save may be 2% of the proof composing effort. But they have to progress. > Because types can guide the implementation of parts that are > important or are part of the computational path. Without example, this is difficult to understand (for me). Regards, -- SM From apostolis.xekoukoulotakis at gmail.com Fri Jan 18 15:43:07 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Fri, 18 Jan 2019 16:43:07 +0200 Subject: [Agda] Do you use postulates extensively? In-Reply-To: <1547811366.2314.39.camel@one.mechvel.pereslavl.ru> References: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> <1547811366.2314.39.camel@one.mechvel.pereslavl.ru> Message-ID: I use agda as a programming language. So the computational path is the part of the program that will be executed. For me , agda will help to decentralize the development of software. If the types describe a function accurately enough, one can replace one implementation with another without the need to coordinate with the other developers. In fact, each developer only needs to know the type and nothing about the other parts of the software. Now, if we extend this idea to the development of network protocols, we can have an abstract protocol, and developers refining parts of it. In that way, we have the concurrent evolution of network protocols without the need for a coordination mechanism which in this case , it is very difficult to have. I do not see any other way to do this . So for me , agda is indispensable . On Fri, Jan 18, 2019 at 1:36 PM Sergei Meshveliani wrote: > On Wed, 2019-01-16 at 16:01 +0200, Apostolis Xekoukoulotakis wrote: > > Mathematics has used informal proofs for thousands of years, and this > > is why we made progress because the cost of a formal proof is > > enormous. > > The cost of each new formal proof is reduced greatly when one uses a > large library of theorems proved formally earlier, when this library is > designed for the corresponding subject domain. This is similar as with > humanly proofs. > One accumulates a library during a couple of years, and then one feels, > that formal proofs become easier. > > Still the cost remains great. > > > > Why then use agda? > > > So far I see only the four reasons. > (1) Dependent types support an adequate domain representation in > mathematics -- apart from possibility of formal proofs. > > (2) Informal proofs often have mistakes (I have shown an example > earlier). > > (3) For curiosity: to play with formalism, to see which theorems can in > reality be proved formally, what resource will it take. > For what aim, I do not know. > > (4) A proof design in Agda is an important area of application for > automatic provers. The more powerful prover is the more proof > assistance Agda will provide when a program uses this prover in its > library. So far, provers save may be 2% of the proof composing > effort. But they have to progress. > > > > Because types can guide the implementation of parts that are > > important or are part of the computational path. > > > Without example, this is difficult to understand (for me). > > Regards, > > -- > SM > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Fri Jan 18 16:23:56 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 18 Jan 2019 18:23:56 +0300 Subject: [Agda] Do you use postulates extensively? In-Reply-To: References: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> <1547811366.2314.39.camel@one.mechvel.pereslavl.ru> Message-ID: <1547825036.2349.26.camel@one.mechvel.pereslavl.ru> On Fri, 2019-01-18 at 16:43 +0200, Apostolis Xekoukoulotakis wrote: > I use agda as a programming language. So the computational path is the > part of the program that will be executed. > > > For me , agda will help to decentralize the development of software. > If the types describe a function accurately enough, one can replace > one implementation with another without the need to coordinate with > the other developers. > > In fact, each developer only needs to know the type and nothing about > the other parts of the software. > > Now, if we extend this idea to the development of network protocols, > [..] Before thinking of protocols, can we consider the following simple example? Haskell has not dependent types. But may be it still fits the goal you name (?). To compile a function f that uses a function g from another module, Haskell compiler uses only the signature of g given in the interface file. module M1 where g :: Int -> Bool g n = ... module M2 where import M1 (g) f :: [Int] -> [Bool] f = map g To compile f, Haskell compiler needs only the signature of g. And to implement f, the programmer needs only to know the signature of g. Can you modify this example (a bit), so that it will become clear one really needs dependent types? -- SM > Now, if we extend this idea to the development of network protocols, > we can have an abstract protocol, and developers refining parts of it. > In that way, we have the concurrent evolution of network protocols > without the need for a coordination mechanism which in this case , it > is very difficult to have. > > > I do not see any other way to do this . So for me , agda is > indispensable . > > > On Fri, Jan 18, 2019 at 1:36 PM Sergei Meshveliani > wrote: > > On Wed, 2019-01-16 at 16:01 +0200, Apostolis Xekoukoulotakis > wrote: > > Mathematics has used informal proofs for thousands of years, > and this > > is why we made progress because the cost of a formal proof > is > > enormous. > > The cost of each new formal proof is reduced greatly when one > uses a > large library of theorems proved formally earlier, when this > library is > designed for the corresponding subject domain. This is similar > as with > humanly proofs. > One accumulates a library during a couple of years, and then > one feels, > that formal proofs become easier. > > Still the cost remains great. > > > > Why then use agda? > > > So far I see only the four reasons. > (1) Dependent types support an adequate domain representation > in > mathematics -- apart from possibility of formal proofs. > > (2) Informal proofs often have mistakes (I have shown an > example > earlier). > > (3) For curiosity: to play with formalism, to see which > theorems can in > reality be proved formally, what resource will it take. > For what aim, I do not know. > > (4) A proof design in Agda is an important area of application > for > automatic provers. The more powerful prover is the more > proof > assistance Agda will provide when a program uses this > prover in its > library. So far, provers save may be 2% of the proof > composing > effort. But they have to progress. > > > > Because types can guide the implementation of parts that > are > > important or are part of the computational path. > > > Without example, this is difficult to understand (for me). > > Regards, > > -- > SM > From mechvel at botik.ru Fri Jan 18 16:42:16 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 18 Jan 2019 18:42:16 +0300 Subject: [Agda] Do you use postulates extensively? In-Reply-To: References: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> <1547811366.2314.39.camel@one.mechvel.pereslavl.ru> Message-ID: <1547826136.2616.15.camel@one.mechvel.pereslavl.ru> On Fri, 2019-01-18 at 16:43 +0200, Apostolis Xekoukoulotakis wrote: > I use agda as a programming language. So the computational path is the > part of the program that will be executed. > > > For me , agda will help to decentralize the development of software. > If the types describe a function accurately enough, one can replace > one implementation with another without the need to coordinate with > the other developers. > > In fact, each developer only needs to know the type and nothing about > the other parts of the software. > > > Now, if we extend this idea to the development of network protocols, > we can have an abstract protocol, and developers refining parts of it. > In that way, we have the concurrent evolution of network protocols > without the need for a coordination mechanism which in this case , it > is very difficult to have. > > > I do not see any other way to do this . So for me , agda is > indispensable . I do not know any about network protocols. To "refine a part of an abstract protocol" (whatever this might mean), the developer, may be, needs be given a specification of the properties of the arguments and of the properties of the function to be programmed. Is this so? Suppose, one writes this function in Haskell, and writes so that the function to satisfy the given specification. And where are dependent types? -- SM From apostolis.xekoukoulotakis at gmail.com Fri Jan 18 18:09:25 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Fri, 18 Jan 2019 19:09:25 +0200 Subject: [Agda] Do you use postulates extensively? In-Reply-To: <1547826136.2616.15.camel@one.mechvel.pereslavl.ru> References: <4de2a1af-3413-3e72-bba7-2549b9554fe7@cse.gu.se> <1547811366.2314.39.camel@one.mechvel.pereslavl.ru> <1547826136.2616.15.camel@one.mechvel.pereslavl.ru> Message-ID: The need for dependent types arises because in most cases, we need to describe exactly what a function does, and other type systems are not sufficient. For example the function g could be implemented by randomly selecting true or false per int number. A more concrete example is agda's Defn(1) definition. There, many of the Maybes depend on the current stage of the computation. The comments play the role of telling the programmer what to expect. In many cases , comments are missing, or are wrong because you forget to update them. Moreover, to understand the comments, you need to understand the order of the computation. In other words, you need to learn many parts of the agda code , to simply use a data structure. This type of programming cannot scale. It can only work for a very small group of people, and for a very small code base. With a refinement of a protocol, I actually mean the refinement as is described in TLA+(2). The arguments are the same as in the previous case. The difference is that now , the group of people that change parts of the protocol / the application are so many that it is impossible to coordinate them, you might not even know they exist. On another note, there are very important positive results if we only use the type to determine if a function is correct. Developers are free to use different implementation and this induces an evolutionary process similar to organisms. Mutations of a protein can exist as long as the functionality remains the same.(3) (1) : https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Monad/Base.hs#L1656 (2) : https://lamport.azurewebsites.net/tla/tla.html (3) : http://hal.elte.hu/fij/r/b/dsc/Hartwell.pdf On Fri, Jan 18, 2019 at 5:42 PM Sergei Meshveliani wrote: > On Fri, 2019-01-18 at 16:43 +0200, Apostolis Xekoukoulotakis wrote: > > I use agda as a programming language. So the computational path is the > > part of the program that will be executed. > > > > > > For me , agda will help to decentralize the development of software. > > If the types describe a function accurately enough, one can replace > > one implementation with another without the need to coordinate with > > the other developers. > > > > In fact, each developer only needs to know the type and nothing about > > the other parts of the software. > > > > > > Now, if we extend this idea to the development of network protocols, > > we can have an abstract protocol, and developers refining parts of it. > > In that way, we have the concurrent evolution of network protocols > > without the need for a coordination mechanism which in this case , it > > is very difficult to have. > > > > > > I do not see any other way to do this . So for me , agda is > > indispensable . > > > > I do not know any about network protocols. To "refine a part of an > abstract protocol" (whatever this might mean), the developer, may be, > needs be given a specification of the properties of the arguments and of > the properties of the function to be programmed. Is this so? > Suppose, one writes this function in Haskell, and writes so that the > function to satisfy the given specification. And where are dependent > types? > > -- > SM > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Fri Jan 18 20:44:05 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 18 Jan 2019 19:44:05 +0000 Subject: [Agda] Do you use postulates extensively? In-Reply-To: References: Message-ID: <2e97b606-6690-781c-a670-4e6a57b02bde@cs.bham.ac.uk> Let me go to the beginning of this thread. I meant to answer earlier but I didn't have time. The answer is that this heavily depends on what you want to do. 1. Suppose you want to formalize all of known mathematics, or, more modestly, all mathematics is currently taught in undergraduate and graduate degrees, or even more modestly, some existing mathematics you like. I would suggest that, in this case, it makes a lot of sense to adopt a "top down" approach, and go from what we teach down to the axioms. The formal-abstracts project seems to adopt this approach. https://jiggerwit.wordpress.com/2018/04/09/formal-abstracts-a-long-term-vision/ http://florisvandoorn.com/talks/formalabstracts2018.pdf https://fl60.sciencesconf.org/data/program/T_Hales_1.pdf What you haven't proved yet is a postulate or axiom. But perhaps you want to formulate it as an assumption (to a module or to a definition/construction/theorem). Otherwise you may end up with 2000 postulates without knowing which parts of your mathematical development depends on which fragment of the unformalized mathematical knowledge. 2. Suppose you want to use a proof assistant such as Agda as a helpful blackboard to do *new* mathematics. This is something I do often. Many times I start with a piece of paper and a pencil, and I work until the moment I need help (to do routine reductions, to test definitions before I find their definitive form, to test proof approaches that worked on paper but then reached many cases to test, or many possible induction hypothesis, or what-you-have in the practice of doing mathematics). Then the top-down approach (probably combined with a bottom-up one) works very well again, using holes rather than postulates as the preferred mechanism. One thing I find *very* useful is to have holes in the *formulations* of definitions and theorems, rather than just the proofs of theorems. In particular, this happens when you have a vague idea of what you want to prove, with perhaps a clearer idea of how you want to prove what you don't know yet you want to prove. Whenever you see 1000 lines of my Agda code, there are 5000 garbage lines or more needed to get them that I don't show you, just like in pencil-and-paper mathematics when it reaches the publication status. I think Agda and all proof assistants in the world need more of this kind of black-board / notepad support. 3. Suppose the only reason you want to use Agda (or something equivalent) is that you have constructive theorems. You don't care about formal correctness per se (you trust yourself). Then you may formalize your theorems so that you can run them. I do this often, particularly for (what I regard to be) surprising constructive results. 4. Suppose you want to experiment with non-standard axioms or axioms that just don't hold in type theory but are consistent (such as "all functions are continuous", bar induction, Markov principle, function extensionality, univalence, etc.). Then you may be tempted to postulate them. Or maybe to use them as assumptions in modules or definitions/constructions. In general, mathematics (constructive or not) is *all about* going from assumptions to conclusions/constructions. But I don't think the postulate mechanism is the best one for this purpose from an engineering point of view of the development of mathematics. In any case, we are in early days, and people (developers and users) are experimenting with this new tool. Martin PS. 5. All this will be used in ways we didn't plan or anticipate, in any case, like with everything in science and mathematics and human knowedge and technology in general. On 15/01/2019 23:56, apostolis.xekoukoulotakis at gmail.com wrote: > Since now, I have spent days proving trivial mathematical propositions > without knowing if the general theory/idea is correct. > > This, of course, means that the theory is developed while programming in > Agda. It is not developed before using Agda. > > I am thinking of using postulates extensively and prove things on paper > instead of doing it in Agda. > It is less safe but much faster. Then check the validity of the main > Idea with the use of the postulates. Only then try to prove some of the > postulates that might be a bit tricky. > > At least for me, proofs that do not take part in the computation of a > program can remain postulates. > > What is your strategy? Do you use postulates extensively? In my opinion > this is important enough that it needs to be put in the documentation. I > have wasted too much time proving trivial propositions and we do not > have to do that. > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From apostolis.xekoukoulotakis at gmail.com Sat Jan 19 15:55:09 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Sat, 19 Jan 2019 16:55:09 +0200 Subject: [Agda] Do you use postulates extensively? In-Reply-To: <2e97b606-6690-781c-a670-4e6a57b02bde@cs.bham.ac.uk> References: <2e97b606-6690-781c-a670-4e6a57b02bde@cs.bham.ac.uk> Message-ID: If I use many postulates, they can't be put as assumptions in the type. I will try to only use postulates when they are trivial or are not in an important path of the theory. And we'll see if it works. > One thing I find *very* useful is to have holes in the *formulations* > of definitions and theorems, rather than just the proofs of theorems. In > particular, this happens when you have a vague idea of what you want to > prove, with perhaps a clearer idea of how you want to prove what you > don't know yet you want to prove. With refinement , I do something similar. Here you know what you want to prove but you do not know how to prove it. You have a degree of freedom that you can use to determine the refining protocol. For example, to prove that a number is factored by 3, you can choose to have numbers that are factored by 6. On Fri, Jan 18, 2019 at 9:44 PM Martin Escardo wrote: > Let me go to the beginning of this thread. > > I meant to answer earlier but I didn't have time. > > The answer is that this heavily depends on what you want to do. > > 1. Suppose you want to formalize all of known mathematics, or, more > modestly, all mathematics is currently taught in undergraduate and > graduate degrees, or even more modestly, some existing mathematics you > like. > > I would suggest that, in this case, it makes a lot of sense to adopt a > "top down" approach, and go from what we teach down to the axioms. > > The formal-abstracts project seems to adopt this approach. > > > > https://jiggerwit.wordpress.com/2018/04/09/formal-abstracts-a-long-term-vision/ > > http://florisvandoorn.com/talks/formalabstracts2018.pdf > > https://fl60.sciencesconf.org/data/program/T_Hales_1.pdf > > What you haven't proved yet is a postulate or axiom. But perhaps you > want to formulate it as an assumption (to a module or to a > definition/construction/theorem). Otherwise you may end up with 2000 > postulates without knowing which parts of your mathematical development > depends on which fragment of the unformalized mathematical knowledge. > > 2. Suppose you want to use a proof assistant such as Agda as a helpful > blackboard to do *new* mathematics. This is something I do often. Many > times I start with a piece of paper and a pencil, and I work until the > moment I need help (to do routine reductions, to test definitions before > I find their definitive form, to test proof approaches that worked on > paper but then reached many cases to test, or many possible induction > hypothesis, or what-you-have in the practice of doing mathematics). > > Then the top-down approach (probably combined with a bottom-up one) > works very well again, using holes rather than postulates as the > preferred mechanism. > > One thing I find *very* useful is to have holes in the *formulations* > of definitions and theorems, rather than just the proofs of theorems. In > particular, this happens when you have a vague idea of what you want to > prove, with perhaps a clearer idea of how you want to prove what you > don't know yet you want to prove. > > Whenever you see 1000 lines of my Agda code, there are 5000 garbage > lines or more needed to get them that I don't show you, just like in > pencil-and-paper mathematics when it reaches the publication status. > > I think Agda and all proof assistants in the world need more of this > kind of black-board / notepad support. > > 3. Suppose the only reason you want to use Agda (or something > equivalent) is that you have constructive theorems. You don't care about > formal correctness per se (you trust yourself). Then you may formalize > your theorems so that you can run them. I do this often, particularly > for (what I regard to be) surprising constructive results. > > > 4. Suppose you want to experiment with non-standard axioms or axioms > that just don't hold in type theory but are consistent (such as "all > functions are continuous", bar induction, Markov principle, function > extensionality, univalence, etc.). Then you may be tempted to postulate > them. Or maybe to use them as assumptions in modules or > definitions/constructions. > > In general, mathematics (constructive or not) is *all about* going from > assumptions to conclusions/constructions. But I don't think the > postulate mechanism is the best one for this purpose from an engineering > point of view of the development of mathematics. In any case, we are in > early days, and people (developers and users) are experimenting with > this new tool. > > Martin > PS. 5. All this will be used in ways we didn't plan or anticipate, in > any case, like with everything in science and mathematics and human > knowedge and technology in general. > > > > > On 15/01/2019 23:56, apostolis.xekoukoulotakis at gmail.com wrote: > > Since now, I have spent days proving trivial mathematical propositions > > without knowing if the general theory/idea is correct. > > > > This, of course, means that the theory is developed while programming in > > Agda. It is not developed before using Agda. > > > > I am thinking of using postulates extensively and prove things on paper > > instead of doing it in Agda. > > It is less safe but much faster. Then check the validity of the main > > Idea with the use of the postulates. Only then try to prove some of the > > postulates that might be a bit tricky. > > > > At least for me, proofs that do not take part in the computation of a > > program can remain postulates. > > > > What is your strategy? Do you use postulates extensively? In my opinion > > this is important enough that it needs to be put in the documentation. I > > have wasted too much time proving trivial propositions and we do not > > have to do that. > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > -- > Martin Escardo > http://www.cs.bham.ac.uk/~mhe > -------------- next part -------------- An HTML attachment was scrubbed... URL: From aggelos.biboudis at epfl.ch Tue Jan 22 10:29:46 2019 From: aggelos.biboudis at epfl.ch (Aggelos Biboudis) Date: Tue, 22 Jan 2019 10:29:46 +0100 Subject: [Agda] SPLASH 2019: 1st Combined Call for Contributions Message-ID: /****************************************************************************/ ACM Conference on Systems, Programming, Languages, and Applications: Software for Humanity (SPLASH'19) Athens, Greece Sun 20 - Fri 25 October 2019 https://2019.splashcon.org/ Sponsored by ACM SIGPLAN /****************************************************************************/ COMBINED CALL FOR CONTRIBUTIONS OOPSLA Onward! Workshops Dynamic Languages Symposium (DLS) Generative Programming: Concepts & Experiences (GPCE) Software Language Engineering (SLE) Managed Programming Languages and Runtimes (MPLR) /****************************************************************************/ The ACM SIGPLAN Conference on Systems, Programming, Languages and Applications: Software for Humanity (SPLASH) embraces all aspects of software construction, to make it the premier conference at the intersection of programming, languages, and software engineering. We invite high quality submissions describing original and unpublished work. Combined Call for Contributions: * SPLASH Workshops * PACMPL Issue OOPSLA * Onward! Papers * Onward! Essays * Dynamic Languages Symposium (DLS) * Generative Programming: Concepts & Experiences (GPCE) * Software Language Engineering (SLE) * Managed Programming Languages and Runtimes (MPLR) * SPLASH-I * Posters * Doctoral Symposium * Student Research Competition * Student Volunteers ## SPLASH Workshops Following its long-standing tradition, SPLASH 2019 will host a variety of high quality workshops, allowing their participants to meet and discuss research questions with peers, to mature new and exciting ideas, and to build up communities and start new collaborations. SPLASH workshops complement the main tracks of the conference and provide meetings in a smaller and more specialized setting. Workshops cultivate new ideas and concepts for the future, optionally recorded in formal proceedings. Submissions are currently being accepted on a rolling basis. The rolling call will close on Fri 15 Mar, 2019. https://2019.splashcon.org/track/splash-2019-workshops ## PACMPL Issue OOPSLA Papers may target any stage of software development, including requirements, modeling, prototyping, design, implementation, generation, analysis, verification, testing, evaluation, maintenance, and reuse of software systems. Contributions may include the development of new tools (such as language front-ends, program analyses, and runtime systems), new techniques (such as methodologies, design processes, and code organization approaches), new principles (such as formalisms, proofs, models, and paradigms), and new evaluations (such as experiments, corpora analyses, user studies, and surveys). Submissions due: Fri 5 Apr, 2019 https://2019.splashcon.org/track/splash-2019-oopsla ## Onward! Papers Onward! is a premier multidisciplinary conference focused on everything to do with programming and software: including processes, methods, languages, communities, and applications. Onward! is more radical, more visionary, and more open than other conferences to ideas that are well-argued but not yet proven. We welcome different ways of thinking about, approaching, and reporting on programming language and software engineering research. Submissions due: Mon 22 April, 2019 https://2019.onward-conference.org/track/onward-2019-papers ## Onward! Essays Onward! Essays is looking for clear and compelling pieces of writing about topics important to the software community. An essay can be long or short. An essay can be an exploration of the topic and its impact, or a story about the circumstances of its creation; it can present a personal view of what is, explore a terrain, or lead the reader in an act of discovery; it can be a philosophical digression or a deep analysis. It can describe a personal journey, perhaps the one the author took to reach an understanding of the topic. The subject area?software, programming, and programming languages?should be interpreted broadly and can include the relationship of software to human endeavors, or its philosophical, sociological, psychological, historical, or anthropological underpinnings. Submissions due: Mon 22 April, 2019 https://2019.onward-conference.org/track/onward-2019-Onward-Essays ## Dynamic Languages Symposium (DLS) >From Lisp, Snobol, and Smalltalk to Python, Racket, and Javascript, Dynamic Languages have been playing a fundamental role both in programming research and practice. DLS is the premier forum for researchers and practitioners to share research and experience on all aspects of Dynamic Languages. DLS invites high quality papers reporting original research and experience related to the design, implementation, and applications of dynamic languages. Abstracts due: Wed 29 May, 2019 Submissions due: Wed 5 Jun, 2019 https://conf.researchr.org/home/dls-2019 ## Generative Programming: Concepts & Experiences (GPCE) The International Conference on Generative Programming: Concepts & Experience (GPCE) is a venue for researchers and practitioners interested in techniques and tools for code generation, language implementation, and metaprogramming. GPCE seeks conceptual, theoretical, empirical, and technical contributions to its topics of interest, which include but are not limited to (i) program transformation, staging, macro systems, preprocessors, program synthesis, and code-recommendation systems, (ii) domain-specific languages, language embedding, language design, and language workbenches, (iii) feature-oriented programming, domain engineering, and feature interactions, (iv) applications and properties of code generation, language implementation, and product-line development. Abstracts due: Fri 14 Jun, 2019 Submissions due: Fri 21 Jun, 2019 https://conf.researchr.org/home/gpce-2019 ## Software Language Engineering (SLE) Software Language Engineering (SLE) is the discipline of engineering languages and their tools required for the creation of software. It abstracts from the differences between programming languages, modelling languages, and other software languages, and emphasizes the engineering facet of the creation of such languages, that is, the establishment of the scientific methods and practices that enable the best results. SLE 2019 solicits high quality contributions in areas ranging from theoretical and conceptual contributions, to tools, techniques, and frameworks in the domain of software language engineering. Abstracts due: Fri 14 Jun, 2019 Submissions due: Fri 21 Jun, 2019 https://conf.researchr.org/home/sle-2019 ## Managed Programming Languages and Runtimes (MPLR) The International Conference on Managed Programming Languages & Runtimes (MPLR, formerly ManLang) is a premier forum for presenting and discussing novel results in all aspects of managed programming languages and runtime systems, which serve as building blocks for some of the most important computing systems around, ranging from small-scale (embedded and real-time systems) to large-scale (cloud-computing and big-data platforms) and anything in between (mobile, IoT, and wearable applications). Submissions due: Mon July 8, 2019 https://conf.researchr.org/home/mplr-2019 ## SPLASH-I SPLASH-I is a series of high-quality talks that highlight the challenges that are on the forefront of both research and practice across the SPLASH community's broad spectrum of domains and techniques. We invite the community to propose speakers (including themselves) through our call for contributions. Submissions due: Fri May 17, 2019 https://2019.splashcon.org/track/splash-2019-SPLASH-I ## Posters The SPLASH Poster track provides an excellent forum for authors to present their recent or ongoing projects in an interactive setting, and receive feedback from the community. We invite submissions covering any aspect of programming, systems, languages and applications. The goal of the poster session is to encourage and facilitate small groups of individuals interested in a technical area to gather and interact at any desired level of detail. The poster session is held early in the conference to promote continued discussion among interested parties. Submissions due: Sat 7 Sep, 2019 https://2019.splashcon.org/track/splash-2019-Posters ## Doctoral Symposium The SPLASH Doctoral Symposium provides students with useful guidance for completing their dissertation research and beginning their research careers. The symposium will provide an interactive forum for doctoral students who have progressed far enough in their research to have a structured proposal, but will not be defending their dissertation in the next 12 months. This year, the John Vlissides Award will be presented to a symposium participant showing significant promise in applied software research. All participants to the Doctoral Symposium are eligible. The award includes a prize of $2,000. Submissions due: Fri 12 Jul, 2019 http://2019.splashcon.org/track/splash-2019-Doctoral-Symposium ## Student Research Competition The ACM Student Research Competition (SRC), sponsored by Microsoft Research, offers a unique forum for ACM student members at the undergraduate and graduate levels to present their original research at SPLASH before a panel of judges and conference attendees. The SRC gives visibility to not only up-and-coming young researchers, but also exposes them to the field of computer science research and its community. This competition also gives students an opportunity to discuss their research with experts in their field, get feedback, and to help them sharpen their communication and networking skills. Student Research Competition abstract due: Fri July 12, 2019 https://2019.splashcon.org/track/splash-2019-SRC ## Student Volunteers The SPLASH Student Volunteers program provides an opportunity for students from around the world to associate with some of the leading personalities in industry and research in the following areas: programming languages, object-oriented technology and software development. Student volunteers contribute to the smooth running of the conference by performing tasks such as: assisting with registration, providing information about the conference to attendees, assisting session organizers and monitoring sessions. Detailed information on how to apply will be available on the main conference page in March 2019. Estimated deadline for the SV applications will be towards the end of September 2019. https://2019.splashcon.org/track/splash-2019-Student-Volunteers ## Information Contact: publicity at splashcon.org Website: https://2019.splashcon.org/ Location: Royal Olympic Hotel, Athens, Greece ## Organization SPLASH General Chair: * Yannis Smaragdakis (University of Athens) OOPSLA Review Committee Chair: * Eelco Visser (Delft University of Technology) Onward! Papers Chair: * Hidehiko Masuhara (Tokyo Institute of Technology) Onward! Essays Chair: * Tomas Petricek (Alan Turing Institute) DLS Program Chair: * Stefan Marr (University of Kent) GPCE General Chair: * Ina Schaefer (Technische Universit?t Braunschweig) GPCE Program Chair: * Tijs van der Storm (Centrum Wiskunde & Informatica / University of Groningen) SLE General Chair: * Oscar Nierstrasz (University of Bern) SLE Program Co-Chairs: * Bruno Oliveira (University of Hong Kong) * Jeff Gray (University of Alabama) SLE Publicity Chair: * Andrei Chi? (Feenk GmbH, Switzerland) SLE AEC Co-Chairs: * Emma S?derberg (Lund University) * Abel Gomez (Universitat Oberta de Catalunya) MPLR General Chair: * Tony Hosking (Australian National University / Data61) MPLR Program Chair: * Irene Finocchi (Sapienza University of Rome) SPLASH-I Co-Chairs: * Shan Shan Huang (Facebook) * Michael Carbin (MIT) Workshops Co-Chairs: * Arjun Guha (University of Massachusetts Amherst) * Neville Grech (University of Athens, University of Malta) OOPSLA Artifact Evaluation Co-Chairs: * Colin S. Gordon (Drexel University) * Jan Vitek (Northeastern University) Posters Chair: * Christoph Reichenbach (Lund University) Doctoral Symposium Chair: * ?ric Tanter (University of Chile & Inria Paris) Student Research Competition Co-Chairs: * Jay McCarthy (University of Massachusetts Lowell) * David Darais (University of Vermont) Student Volunteers Co-Chairs: * Juliana Franco (Microsoft Research, Cambridge) * Tony Antoniadis (University of Athens) Publications Chair: * Magnus Madsen (Aarhus University) Publicity Co-Chairs: * Aggelos Biboudis (?cole Polytechnique F?d?rale de Lausanne) * Tijs van der Storm (Centrum Wiskunde & Informatica / University of Groningen) Local Arrangements Chair: * George Fourtounis (University of Athens) Accessibility Chair: * Kostas Saidis (University of Athens) Sponsorships Co-Chairs: * Caitlin Sadowski (Google) * Jaeheon Yi (Google) Video Chair: * Benjamin Chung (Northeastern University) Web Co-Chairs: * Aggelos Biboudis (?cole Polytechnique F?d?rale de Lausanne) * Aviral Goel (Northeastern University) /****************************************************************************/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From frantisek+agda at farka.eu Tue Jan 22 12:52:04 2019 From: frantisek+agda at farka.eu (=?utf-8?Q?Franti=C5=A1ek?= Farka) Date: Tue, 22 Jan 2019 11:52:04 +0000 Subject: [Agda] PPDP 2019 CFP - Principles and Practice of Declarative Programming Message-ID: <20190122115204.GB28139@farka.eu> [Apologies for cross-posting; please circulate] ====================================================================== CALL FOR PAPERS -- PPDP 2019 21st International Symposium on Principles and Practice of Declarative Programming 7?9 October 2019, Porto, Portugal Collocated with FM'19 http://ppdp2019.macs.hw.ac.uk ====================================================================== Important Dates --------------- Title and abstract registration 26 April 2019 (AoE) Paper submission 3 May 2019 (AoE) Rebuttal period (48 hours) 3 June 2019 (AoE) Author notification 14 June 2019 Final paper version 15 July 2019 Conference 7?9 October 2019 About PPDP ---------- The PPDP 2019 symposium brings together researchers from the declarative programming communities, including those working in the functional, logic, answer-set, and constraint handling programming paradigms. The goal is to stimulate research in the use of logical formalisms and methods for analyzing, performing, specifying, and reasoning about computations, including mechanisms for concurrency, security, static analysis, and verification. Scope ----- Submissions are invited on all topics related to declarative programming, from principles to practice, from foundations to applications. Topics of interest include, but are not limited to - Language Design: domain-specific languages; interoperability; concurrency, parallelism, and distribution; modules; probabilistic languages; reactive languages; database languages; knowledge representation languages; languages with objects; language extensions for tabulation; metaprogramming. - Implementations: abstract machines; interpreters; compilation; compile-time and run-time optimization; memory management. - Foundations: types; logical frameworks; monads and effects; semantics. - Analysis and Transformation: partial evaluation; abstract interpretation; control flow; data flow; information flow; termination analysis; resource analysis; type inference and type checking; verification; validation; debugging; testing. - Tools and Applications: programming and proof environments; verification tools; case studies in proof assistants or interactive theorem provers; certification; novel applications of declarative programming inside and outside of CS; declarative programming pearls; practical experience reports and industrial application; education. The PC chair (Ekaterina Komendanstkaya ) will be happy to advise on the appropriateness of a topic. Submission Categories --------------------- Submissions can be made in three categories: regular Research Papers, System Descriptions, and Experience Reports. Submissions of Research Papers must present original research which is unpublished and not submitted elsewhere. They must not exceed 12 pages ACM style 2-column (including figures, but excluding bibliography). Work that already appeared in unpublished or informally published workshop proceedings may be submitted (please contact the PC chair in case of questions). Research papers will be judged on originality, significance, correctness, clarity, and readability. Submission of System Descriptions must describe a working system whose description has not been published or submitted elsewhere. They must not exceed 10 pages and should contain a link to a working system. System Descriptions must be marked as such at the time of submission and will be judged on originality, significance, usefulness, clarity, and readability. Submissions of Experience Reports are meant to help create a body of published, refereed, citable evidence where declarative programming such as functional, logic, answer-set, constraint programming, etc., is used in practice. They must not exceed 5 pages **including references**. Experience Reports must be marked as such at the time of submission and need not report original research results. They will be judged on significance, usefulness, clarity, and readability. Supplementary material may be provided in a clearly marked appendix beyond the above-mentioned page limits. Reviewers are not required to study any material beyond the respective page limit. Format of a Submission ---------------------- For each paper category, you must use the most recent version of the "Current ACM Master Template" which is available at . The most recent version at the time of writing is 1.48. You must use the LaTeX sigconf proceedings template as the conference organizers are unable to process final submissions in other formats. In case of problems with the templates, contact ACM's TeX support team at Aptara . Authors should note ACM's statement on author's rights (http://authors.acm.org/) which apply to final papers. Submitted papers should meet the requirements of ACM's plagiarism policy (http://www.acm.org/publications/policies/plagiarism_policy). Requirements for Publication ---------------------------- At least one author of each accepted submission will be expected to attend and present the work at the conference. The pc chair may retract a paper that is not presented. The pc chair may also retract a paper if complaints about the paper's correctness are raised which cannot be resolved by the final paper deadline. Program Committee Chair ----------------------- Ekaterina Komendantskaya Heriot-Watt University, UK Program Committee ----------------- Henning Basold CNRS, ENS de Lyon, France Jasmin Christian Blanchette Vrije Universiteit Amsterdam, The Netherlands Maria Paola Bonacina University of Verona, Italy Dmitry Boulytchev Saint?Petersburg University, Russia William Byrd University of Alabama at Birmingham, USA Ornela Dardha University of Glasgow, UK Marco Gaboardi University at Buffalo, SUNY, USA Arie Gurfinkel University of Waterloo, Canada Zhenjiang Hu National Institute of Informatics, Japan Moa Johansson Chalmers University of Technology, Sweden Neelakantan Krishnaswami University of Cambridge, UK Ralf L?mmel University of Koblenz ? Landau, Germany Anthony Widjaja Lin University of Oxford, UK Aart Middeldorp University of Innsbruck, Austria Gopalan Nadathur University of Minnesota, USA Keisuke Nakano Tohoku University, Japan Dominic Orchard University of Kent, UK Alberto Pardo University of the Republic, Uruguay Aleksy Schubert University of Warsaw, Poland Peter J. Stuckey The University of Melbourne, Australia Tarmo Uustalu Reykjavik University, Iceland Local Chair ----------- Jos? Nuno Oliveira INESC TEC & University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . Publicity Chair --------------- Franti?ek Farka University of St Andrews & Heriot-Watt University, UK From nad at cse.gu.se Wed Jan 23 08:49:02 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 23 Jan 2019 08:49:02 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: <1546957065.2978.23.camel@dimjasevic.net> References: <1546957065.2978.23.camel@dimjasevic.net> Message-ID: <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> On 08/01/2019 15.17, Marko Dimja?evi? wrote: > Can you please point me to resources on totality checking in Agda? I'm > aware of the following wiki page: > > https://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.Total > ity I don't think there is a single text (other than the source code) that describes everything in detail. What kind of information are you looking for? -- /NAD From marko at dimjasevic.net Wed Jan 23 09:02:24 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Wed, 23 Jan 2019 09:02:24 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> References: <1546957065.2978.23.camel@dimjasevic.net> <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> Message-ID: <1548230544.12400.2.camel@dimjasevic.net> Hi Nils, On Wed, 2019-01-23 at 08:49 +0100, Nils Anders Danielsson wrote: > > I don't think there is a single text (other than the source code) > that > describes everything in detail. What kind of information are you > looking > for? There are several things I am looking for. I am interested in: 1) What form of recursion is allowed in Agda for terminating functions? 2) How does Agda check for productivity? 3) How to write a main program, which should be of type IO (), and if this is possible at all if partial functions are not allowed in Agda? 4) In Idris, one can annotate a function as partial; I found no way of writing partial functions in Agda. I read lecture notes from the International LerNetALFA Summer School 2008 and in particular chapter 2 titled "Dependent Types at Work" that has a section "General Recursion and Partial Functions", but I still don't see how to write partial functions in Agda; what is given there and in the Agda wiki doesn't look to me like partial functions, but total functions instead because those examples are defined on their whole domain. 5) How to write productive programs in Agda that use fuel to ensure their totality? -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID:???????056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From nad at cse.gu.se Wed Jan 23 09:35:02 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 23 Jan 2019 09:35:02 +0100 Subject: [Agda] Solver usage In-Reply-To: <1546207308.2333.46.camel@one.mechvel.pereslavl.ru> References: <1546207308.2333.46.camel@one.mechvel.pereslavl.ru> Message-ID: <6e414733-5c09-560c-0031-603ec1f2a4c7@cse.gu.se> On 30/12/2018 23.01, Sergei Meshveliani wrote: > And it does not work. > Please, how to fix? First, give the arguments in the right order: solve 2 (? x y ? ((x :* y) :- (y :* x)) := (con 0#)) ? a b Giving reflexivity in the hole still does not work. I looked at the normalised goal type, and it contains subexpressions like CommutativeRing.1# R ? 0#. This expression is stuck, which is not so surprising, given that you have not used a concrete ring or a concrete implementation of _?_: module _ {? ?=} (R : CommutativeRing ? ?=) (open CommutativeRing R using (_?_)) (_?_ : Decidable _?_) We can take things a little further by instantiating the ring solver in a different way: open import Algebra open import Algebra.Solver.Ring.AlmostCommutativeRing open import Data.Maybe module _ {? ?=} (R : CommutativeRing ? ?=) where open CommutativeRing R open import Algebra.Solver.Ring (AlmostCommutativeRing.rawRing (fromCommutativeRing R)) (fromCommutativeRing R) (-raw-almostCommutative? (fromCommutativeRing R)) (? _ _ ? nothing) lemma : (a b : Carrier) ? ((a * b) - (b * a)) ? 0# lemma a b = solve 2 (? x y ? ((x :* y) :- (y :* x)) := (con 0#)) {!!} a b Here, as a first try, I have instantiated the "weak decision procedure" with ? _ _ ? nothing. Now the normalised goal type is readable: {x : Carrier} {x = x? : Carrier} ? (0# * x + ((0# * x? + (1# * 1# + - 1# * 1# * (1# * 1#))) * x? + (1# * 0# + - 1# * 1# * (0# * 1#)))) * x + 0# ? 0# * x + (0# * x? + 0#) You can see that there are a number of "obvious" simplifications that have not been performed. I think that a good way to proceed would be to instantiate the coefficient ring with the usual commutative ring over the integers. The standard library already contains such an instantiation for commutative *semirings* (using the natural numbers instead of the integers), but I did not find one for the integers. See Section 4 of "Proving Equalities in a Commutative Ring Done Right in Coq" by Gre?goire and Mahboubi (https://doi.org/10.1007/11541868_7) for more information. -- /NAD From henning at basold.eu Wed Jan 23 12:18:01 2019 From: henning at basold.eu (Henning Basold) Date: Wed, 23 Jan 2019 12:18:01 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: <1548230544.12400.2.camel@dimjasevic.net> References: <1546957065.2978.23.camel@dimjasevic.net> <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> <1548230544.12400.2.camel@dimjasevic.net> Message-ID: <1d883042-9a83-f887-138d-4027946e5d91@basold.eu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Hi Marko, On 23/01/2019 09:02, Marko Dimja?evi? wrote: > Hi Nils, > > On Wed, 2019-01-23 at 08:49 +0100, Nils Anders Danielsson wrote: >> >> I don't think there is a single text (other than the source >> code) that describes everything in detail. What kind of >> information are you looking for? > > > There are several things I am looking for. I am interested in: > > 1) What form of recursion is allowed in Agda for terminating > functions? > Agda has two mechanisms: The Foetus productivity checker that is described here: https://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.Termin ationChecker and in the there linked publication by Andreas Abel. The other mechanism are sized types, which have been described in various places, check https://agda.readthedocs.io/en/latest/language/sized-types.html and http://www.cse.chalmers.se/~abela/rairo04.pdf > 2) How does Agda check for productivity? > Productivity is ensured by termination checking if you use the copattern-style coinductive types. The reason is that elements of coinductive types only unfold upon observation and the termination checker ensures that all the terms in Agda remain terminating under all observations. This is the idea underlying the strong normalisation proof in https://perso.ens-lyon.fr/henning.basold/publications/DepIndCoindTypes.p df, and I provide in Chapter 4 of my thesis (http://perso.ens-lyon.fr/henning.basold/thesis/) a characterisation of the largest class of inductive-coinductive programs that a terminating and thus productive. > 3) How to write a main program, which should be of type IO (), and > if this is possible at all if partial functions are not allowed in > Agda? > Within Agda, there is no such thing as non-terminating functions and impure IO. You can implement the IO monad in Agda (Interactive Programs and Weakly Final Coalgebras in Dependent Type Theory by Anton Setzer and Peter Hancock), or otherwise you postpone the IO interaction to extracted code (check again Setzer's work, this time on GUIs in Agda). > 4) In Idris, one can annotate a function as partial; I found no way > of writing partial functions in Agda. I read lecture notes from > the International LerNetALFA Summer School 2008 and in particular > chapter 2 titled "Dependent Types at Work" that has a section > "General Recursion and Partial Functions", but I still don't see > how to write partial functions in Agda; what is given there and in > the Agda wiki doesn't look to me like partial functions, but total > functions instead because those examples are defined on their whole > domain. > You can declare functions to be non-terminating or ignored by the termination checker (https://agda.readthedocs.io/en/latest/language/pragmas.html). If you do this this in places where Agda has to compute with a non-terminating function in, e.g., a dependent type, then things will go wrong of course. For modelling non-terminating computations using coinductive types, check Capretta (http://arxiv.org/abs/cs/0505037) and https://perso.ens-lyon.fr/henning.basold/code/Partial/PComp.html for the correctness of ?-recursion in Agda implemented through the definition of partiality proposed by Capretta. Also have a look at https://personal.cis.strath.ac.uk/conor.mcbride/TotallyFree.pdf > 5) How to write productive programs in Agda that use fuel to > ensure their totality? I have to admit that I'm not very familiar with this, but is this not about total functions ? ? Maybe A? Cheers, Henning -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlxITWYACgkQatBsEc2x Mm5vnw//Yuzk1b9P52HsgUxp14ZP16aDtWELqvklsG23tVz9U1Io8S2FwvnKVwrM Ejkfyn7PCJ2yLwVJipbe7gRxUr1OvU7H5uMBazE1UynGW1Z7uNoGhVgk0w+ETDRE By5FRudCmInaZBgvjKZCDcoPVbAFuR/TGBFEZue+sJOHjHWWVokpLjE3URkT/cvF YMcIuAD8rg0RUGUYWsWSjYvZcxWEKTdj8ye7iH3M36LQCZc713fnsDZQ62BNI5Jp AvqhLW/eMCH29wvpKO0nxa+V6U6/+dfkpluWr4n7kdBFsg/oApYOT69ZyO0LSq+m 1xHeOkGQyGR8Y+6V3Sj7YxlU47LVNEwU5y9HUDNjD85/o8UOWYp3LlaDcRilXHw/ ceveiPatlh23lkCBYMplp3OGpKEkPV5+zB3TTf8mmzwLTipFYtjcobMfsW4mFj3Z oF8HHtpAjWcaoqoff9V3/nFD5beCWzzk4oIbklayn4siHwPHsB6tky835P7q2Rdu aoUek01q0qI9N9i5HsPxs4kpkIXPwN+YIOZYXw2iUwVEutFgByNt4FjXNF7B9xU/ LYY9EU6TBItbhgwhZ3jfDULfYR00c5i/sceeh0VDdMx+ZjILLAnqQWW5duiDZJ+W xY3O1pHTEAoMAXD+zVZUaQIdD0mRMuS+EzyYZcJwzhDGvgOdHss= =MCYJ -----END PGP SIGNATURE----- From nad at cse.gu.se Wed Jan 23 12:45:14 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 23 Jan 2019 12:45:14 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: <1d883042-9a83-f887-138d-4027946e5d91@basold.eu> References: <1546957065.2978.23.camel@dimjasevic.net> <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> <1548230544.12400.2.camel@dimjasevic.net> <1d883042-9a83-f887-138d-4027946e5d91@basold.eu> Message-ID: On 23/01/2019 12.18, Henning Basold wrote: > The Foetus productivity checker that is described here: > https://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.Termin > ationChecker and in the there linked publication by Andreas Abel. Agda has for a long time supported more than Foetus: Andreas Abel added support for some kind of size-change termination. -- /NAD From mechvel at botik.ru Wed Jan 23 12:29:20 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 23 Jan 2019 14:29:20 +0300 Subject: [Agda] Solver usage In-Reply-To: <6e414733-5c09-560c-0031-603ec1f2a4c7@cse.gu.se> References: <1546207308.2333.46.camel@one.mechvel.pereslavl.ru> <6e414733-5c09-560c-0031-603ec1f2a4c7@cse.gu.se> Message-ID: <1548242960.15107.28.camel@scico.botik.ru> On Wed, 2019-01-23 at 09:35 +0100, Nils Anders Danielsson wrote: > On 30/12/2018 23.01, Sergei Meshveliani wrote: > > And it does not work. > > Please, how to fix? > > First, give the arguments in the right order: > > solve 2 (? x y ? ((x :* y) :- (y :* x)) := (con 0#)) > ? a b > > Giving reflexivity in the hole still does not work. I looked at the > normalised goal type, and it contains subexpressions like > > CommutativeRing.1# R ? 0#. > > This expression is stuck, which is not so surprising, given that you > have not used a concrete ring or a concrete implementation of _?_: It is principal, that the goal to be proved for an arbitrary CommutativeRing. Maybe the prover could be adopted to the case of CommutativeRing + the axiom of 0# ? 1# ? Also, it looks like it fails to prove x - x ? 0#, which can be derived from the Group instance for _+_. Maybe, it can be all fixed by bringing-in polynomials over Integer, as you write below (I guess this construct is basic in the standard equality prover). My current concrete goal is, probably, simpler. The question is: how to prove with RingSolver the following three equalities in an arbitrary CommutativeSemiring: (I) (((n1 * d2 + n2 * d1) * d3) + n3 * d12) * (d1 * d23) ? (n1 * d23 + (n2 * d3 + n3 * d2) * d1) * (d12 * d3) (II) (n * n') * (d * d'') + (n * n'') * (d * d') ? d * (n * (n' * d'' + n'' * d')) (III) ((p'G * p'N) * g??) * (g?? * (pG * pD)) ? ((g?? * g??) * (pG * p'G)) * (p'N * pD) ? All the variables here are under \forall (... : Carrier). I can set a proof by hand, but I thought that it is nicer to call some prover. I have two large modules of my home-made prover for (Commutative)Semiring. And it proves these three. But it is better to use some standard prover, because I have a small application which needs to be as close to standard library as possible. Can anybody, please, show how to use the standard solver to prove any one of the above three equalities? Thanks, ------ Sergei > module _ {? ?=} (R : CommutativeRing ? ?=) > (open CommutativeRing R using (_?_)) > (_?_ : Decidable _?_) > > We can take things a little further by instantiating the ring solver in > a different way: > > open import Algebra > open import Algebra.Solver.Ring.AlmostCommutativeRing > open import Data.Maybe > > module _ {? ?=} (R : CommutativeRing ? ?=) where > > open CommutativeRing R > > open import Algebra.Solver.Ring > (AlmostCommutativeRing.rawRing (fromCommutativeRing R)) > (fromCommutativeRing R) > (-raw-almostCommutative? (fromCommutativeRing R)) > (? _ _ ? nothing) > > lemma : (a b : Carrier) ? ((a * b) - (b * a)) ? 0# > lemma a b = > solve 2 (? x y ? ((x :* y) :- (y :* x)) := (con 0#)) > {!!} a b > > Here, as a first try, I have instantiated the "weak decision procedure" > with ? _ _ ? nothing. Now the normalised goal type is readable: > > {x : Carrier} {x = x? : Carrier} ? > (0# * x + ((0# * x? + (1# * 1# + - 1# * 1# * (1# * 1#))) * x? + > (1# * 0# + - 1# * 1# * (0# * 1#)))) * x + 0# ? > 0# * x + (0# * x? + 0#) > > You can see that there are a number of "obvious" simplifications that > have not been performed. I think that a good way to proceed would be to > instantiate the coefficient ring with the usual commutative ring over > the integers. The standard library already contains such an > instantiation for commutative *semirings* (using the natural numbers > instead of the integers), but I did not find one for the integers. > > See Section 4 of "Proving Equalities in a Commutative Ring Done Right in > Coq" by Gre?goire and Mahboubi (https://doi.org/10.1007/11541868_7) for > more information. > From henning at basold.eu Wed Jan 23 13:26:30 2019 From: henning at basold.eu (Henning Basold) Date: Wed, 23 Jan 2019 13:26:30 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: References: <1546957065.2978.23.camel@dimjasevic.net> <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> <1548230544.12400.2.camel@dimjasevic.net> <1d883042-9a83-f887-138d-4027946e5d91@basold.eu> Message-ID: <05902b85-f6a0-48b2-aaae-83d138ee43a0@basold.eu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 On 23/01/2019 12:45, Nils Anders Danielsson wrote: > On 23/01/2019 12.18, Henning Basold wrote: >> The Foetus productivity checker that is described here: >> https://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.Ter min >> >> ationChecker and in the there linked publication by Andreas Abel. > > Agda has for a long time supported more than Foetus: Andreas Abel > added support for some kind of size-change termination. > But you don't refer to sized types, do you? I remember seeing something more elaborate than Foetus, but I don't remember any more where. Do you have a link or paper at hand? Thanks! Henning -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlxIXXMACgkQatBsEc2x Mm653RAAmgs6SKJz4CRlUDC5CSq+8vPO9AuajehyxJPiRyb39nH2dtaeB3jV9GUs O5Z7FKL4hGSktXGpQSGv7EAFcOn3GBRWUlEqYg77Gg2eWyAdLWZts/JM4OQY5a2z 98vc8sOFO/gdZCVl6cP884gQTQodo/FVWgEM+nbhL7gYU9a8h4Dkm05mhieYQ0Mg tHzsvrBKuQKuaYh4vsprIKs93gmGmSOFoAAYC2ubmG89di8ewUE5EcigE0B6jz8f +Zsx9dfZxJ1AekabDoCldkcIhl+eDe/scdX+0IE6wKzjcibM9g05GaFyq8IhPq0M AN1/3CQPwQ1VutTaEJj+mST1LxEkGrquNoGiz3dSYfS0j0hiNPvmbv468C/v66hb p8urLPcbq3Ty0cH8F+9X1/XtGX1o9Ox+za/JD1BRdy9FxTEuO8SBgIxGHo5urdbe p6QO12+vpCuTfBwzi8Kfjr+72SjFHp92/izZz//GrHXcSOSzHPEosc1cDyka9VF+ Gxfjb7SO4TF/yrOycdB69gUj/roZi8gixw7REAgr4pKaqPU6dJwHoPNPk6749u/8 uUfrDsbs/7FiUsEp7D4+bRNtFPBsgOa6Oa0r/JZJyy+m63Vtpy9je/1dRQTYH/KR JezwyAA475yoIJZrHEFDZB33HxT84TUipWLAd94VuECyUKn9TMw= =6OPv -----END PGP SIGNATURE----- From nad at cse.gu.se Wed Jan 23 21:25:31 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 23 Jan 2019 21:25:31 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: <05902b85-f6a0-48b2-aaae-83d138ee43a0@basold.eu> References: <1546957065.2978.23.camel@dimjasevic.net> <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> <1548230544.12400.2.camel@dimjasevic.net> <1d883042-9a83-f887-138d-4027946e5d91@basold.eu> <05902b85-f6a0-48b2-aaae-83d138ee43a0@basold.eu> Message-ID: <9cd38e35-ac82-0a3d-4f3a-2ff1e6855df8@cse.gu.se> On 23/01/2019 13.26, Henning Basold wrote: > But you don't refer to sized types, do you? No, size-change termination: https://en.wikipedia.org/wiki/Size-change_termination_principle -- /NAD From nad at cse.gu.se Wed Jan 23 21:52:12 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 23 Jan 2019 21:52:12 +0100 Subject: [Agda] Solver usage In-Reply-To: <1548242960.15107.28.camel@scico.botik.ru> References: <1546207308.2333.46.camel@one.mechvel.pereslavl.ru> <6e414733-5c09-560c-0031-603ec1f2a4c7@cse.gu.se> <1548242960.15107.28.camel@scico.botik.ru> Message-ID: On 23/01/2019 12.29, Sergei Meshveliani wrote: > Maybe the prover could be adopted to the case of > CommutativeRing + the axiom of 0# ? 1# ? > > Also, it looks like it fails to prove x - x ? 0#, > which can be derived from the Group instance for _+_. I suggest that you study the paper by Gre?goire and Mahboubi that I linked to. -- /NAD From mechvel at botik.ru Thu Jan 24 12:28:46 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 24 Jan 2019 14:28:46 +0300 Subject: [Agda] Solver usage In-Reply-To: <1548242960.15107.28.camel@scico.botik.ru> References: <1546207308.2333.46.camel@one.mechvel.pereslavl.ru> <6e414733-5c09-560c-0031-603ec1f2a4c7@cse.gu.se> <1548242960.15107.28.camel@scico.botik.ru> Message-ID: <1548329326.2329.7.camel@one.mechvel.pereslavl.ru> On Wed, 2019-01-23 at 14:29 +0300, Sergei Meshveliani wrote: > The question is: > how to prove with RingSolver the following three equalities in an > arbitrary CommutativeSemiring: > > (I) > (((n1 * d2 + n2 * d1) * d3) + n3 * d12) * (d1 * d23) > ? > (n1 * d23 + (n2 * d3 + n3 * d2) * d1) * (d12 * d3) > > [..] Sorry, I have forgotten to add here: let d12 = d1 * d2; d23 = d2 * d3 in ... -- SM From matthewdaggitt at gmail.com Thu Jan 24 15:08:53 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 24 Jan 2019 14:08:53 +0000 Subject: [Agda] Emacs whitespace-mode Message-ID: Does anyone know of any existing incompatibilities with the emacs `whitespace-mode` in `agda-mode`? I use to have it working but at some point in the last couple of years it's stopped working. I have the following code in my `.emacs` file: (require 'whitespace) (setq whitespace-line-column 80) ;; limit line length (setq whitespace-style '(face lines-tail)) (global-whitespace-mode +1) and the highlighting works everywhere except in `.agda` files... Many thanks, Matthew -------------- next part -------------- An HTML attachment was scrubbed... URL: From abela at chalmers.se Thu Jan 24 18:48:09 2019 From: abela at chalmers.se (Andreas Abel) Date: Thu, 24 Jan 2019 18:48:09 +0100 Subject: [Agda] TYPES 2019, 11-14 June 2019, Oslo: Announcement and first call for contributions Message-ID: Reminder of TYPES abstract deadline on 4 March 2019... ANNOUNCEMENT AND FIRST CALL FOR CONTRIBUTIONS 25th International Conference on Types for Proofs and Programs, TYPES 2019 and EUTYPES Cost Action CA15123 meeting Oslo, Norway, 11 - 14 June 2019 https://cas.oslo.no/types2019/ TYPES 2019 will be held in parallel (and jointly on 12 June) with HoTT-UF, 12-14 June 2019, https://cas.oslo.no/hott-uf/ BACKGROUND The TYPES meetings are a forum to present new and on-going work in all aspects of type theory and its applications, especially in formalised and computer assisted reasoning and computer programming. The TYPES areas of interest include, but are not limited to: * foundations of type theory and constructive mathematics; * applications of type theory; * dependently typed programming; * industrial uses of type theory technology; * meta-theoretic studies of type systems; * proof assistants and proof technology; * automation in computer-assisted reasoning; * links between type theory and functional programming; * formalizing mathematics using type theory. We encourage talks proposing new ways of applying type theory. In the spirit of workshops, talks may be based on newly published papers, work submitted for publication, but also work in progress. The EUTypes Cost Action CA15123 (eutypes.cs.ru.nl) focuses on the same research topics as TYPES and partially sponsors the TYPES Conference: Part of the programme is organised under the auspices of EUTypes. INVITED SPEAKERS * Adam Chlipala (MIT, Cambridge MA, USA) * Assia Mahboubi, (INRIA, Nantes, France) * Conor McBride (University of Strathclyde, Glasgow, UK) * Stephanie Weirich (University of Pennsylvania, Pittsburgh, USA) CONTRIBUTED TALKS We solicit contributed talks. Selection of those will be based on extended abstracts/short papers of 2 pp formatted with easychair.cls. The submission site is https://easychair.org/conferences/?conf=types2019 Important dates: * submission of 2 pp abstract: 4 March 2019 * notification of acceptance/rejection: 15 April 2019 * camera-ready version of abstract: 6 May 2019 Camera-ready versions of the accepted contributions will be published in an informal book of abstracts for distribution at the workshop. POST-PROCEEDINGS Similarly to TYPES 2011 and TYPES 2013-2018, a post-proceedings volume will be published in the Leibniz International Proceedings in Informatics (LIPIcs) series. Submission to that volume will be open to everyone. Tentative submission deadline: September 2019. PROGRAMME COMMITTEE Thorsten Altenkirch (University of Nottingham) Marc Bezem (University of Bergen, chair) Ma?gorzata Biernacka (University of Wroc?aw) Jesper Cockx (Chalmers University Gothenburg) Herman Geuvers (Radboud University Nijmegen) Silvia Ghilezan (University of Novi Sad) Mauro Jaskelioff (Universidad Nacional de Rosario) Ambrus Kaposi (E?tv?s Lor?nd University) Ralph Matthes (IRIT ? CNRS and University of Toulouse) ?tienne Miquey (INRIA, France) Leonardo da Moura (Microsoft Research) Keiko Nakata (SAP Potsdam) Fredrik Nordvall Forsberg (University of Strathclyde) Benjamin Pierce (University of Pennsylvania) Elaine Pimentel (Federal University of Rio Grande do Norte) Lu?s Pinto (University of Minho) Simona Ronchi Della Rocca (Universit? di Torino) Carsten Sch?rmann (IT University of Copenhagen) Wouter Swierstra (Utrecht University) Tarmo Uustalu (Reykjavik University) TYPES STEERING COMMITTEE Andreas Abel, Marc Bezem, Jos? Esp?rito Santo, Hugo Herbelin, Ambrus Kaposi, Ralph Matthes (chair). ABOUT TYPES The TYPES meetings from 1990 to 2008 were annual workshops of a sequence of five EU funded networking projects. From 2009 to 2015, TYPES has been run as an independent conference series. From 2016, TYPES is partially supported by COST Action EUTypes CA15123. Previous TYPES meetings were held in Antibes (1990), Edinburgh (1991), B?stad (1992), Nijmegen (1993), B?stad (1994), Torino (1995), Aussois (1996), Kloster Irsee (1998), L?keberg (1999), Durham (2000), Berg en Dal near Nijmegen (2002), Torino (2003), Jouy-en-Josas near Paris (2004), Nottingham (2006), Cividale del Friuli (2007), Torino (2008), Aussois (2009), Warsaw (2010), Bergen (2011), Toulouse (2013), Paris (2014), Tallinn (2015), Novi Sad (2016), Budapest (2017), Braga (2018). CONTACT Email:types2019 at cas.oslo.no Organisers: Marc Bezem (University of Bergen, chair) Bj?rn Ian Dundas (University of Bergen) Erna Kas (Utrecht University) Camilla K. Elmar (Centre for Advanced Study) -- Andreas Abel <>< Du bist der geliebte Mensch. Department of Computer Science and Engineering Chalmers and Gothenburg University, Sweden andreas.abel at gu.se http://www.cse.chalmers.se/~abela/ From andreas.abel at ifi.lmu.de Thu Jan 24 18:51:47 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Thu, 24 Jan 2019 18:51:47 +0100 Subject: [Agda] Emacs whitespace-mode In-Reply-To: References: Message-ID: <8cf5bc44-6e6d-b144-362a-522f8b56ad12@ifi.lmu.de> I am using just (setq-default show-trailing-whitespace t) Also, I am using Nisses automatic trailing-whitespace removal hook: ;; Draw tabs with the same color as trailing whitespace (add-hook 'font-lock-mode-hook (lambda () (when (member major-mode fix-whitespace-modes) (font-lock-add-keywords nil '(("\t" 0 'trailing-whitespace prepend)))))) ;; Whitespace (defvar fix-whitespace-modes '(text-mode agda2-mode haskell-mode literate-haskell-mode haskell-cabal-mode emacs-lisp-mode LaTeX-mode TeX-mode latex-mode plain-tex-mode tex-mode makefile-gmake-mode HTML-mode html-mode mhtml-mode bibtex-mode BibTeX-mode C-mode c++-mode java-mode haskell-cabal-mode lean-mode miniagda-mode python-mode sh-mode bnfc-mode nxml-mode rst-mode rust-mode conf-space-mode conf-colon-mode conf-unix-mode beluga-mode twelf-mode fstar-mode markdown-mode css-mode makefile-bsdmake-mode) "*Whitespace issues should be fixed when these modes are used.") (add-hook 'before-save-hook (lambda nil (when (and (member major-mode fix-whitespace-modes) (not buffer-read-only)) ;; Delete trailing whitespace. (delete-trailing-whitespace) ;; Insert a final newline character, if necessary. (save-excursion (save-restriction (widen) (unless (equal ?\n (char-before (point-max))) (goto-char (point-max)) (insert "\n"))))))) On 2019-01-24 15:08, Matthew Daggitt wrote: > Does anyone know of any existing incompatibilities with the emacs > `whitespace-mode` in `agda-mode`? I use to have it working but at some > point in the last couple of years it's stopped working. I have the > following code in my `.emacs` file: > > (require 'whitespace) > (setq whitespace-line-column 80) ;; limit line length > (setq whitespace-style '(face lines-tail)) > (global-whitespace-mode +1) > > and the highlighting works everywhere except in `.agda` files... > Many thanks, > Matthew > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From marko at dimjasevic.net Fri Jan 25 17:43:18 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Fri, 25 Jan 2019 17:43:18 +0100 Subject: [Agda] Totality checking in Agda In-Reply-To: <9cd38e35-ac82-0a3d-4f3a-2ff1e6855df8@cse.gu.se> References: <1546957065.2978.23.camel@dimjasevic.net> <56175853-9d2d-98f1-6d79-03e5a5a4bcf9@cse.gu.se> <1548230544.12400.2.camel@dimjasevic.net> <1d883042-9a83-f887-138d-4027946e5d91@basold.eu> <05902b85-f6a0-48b2-aaae-83d138ee43a0@basold.eu> <9cd38e35-ac82-0a3d-4f3a-2ff1e6855df8@cse.gu.se> Message-ID: <1548434598.1485.0.camel@dimjasevic.net> On Wed, 2019-01-23 at 21:25 +0100, Nils Anders Danielsson wrote: > > No, size-change termination: > > ???https://en.wikipedia.org/wiki/Size-change_termination_principle > Thank you Nils and Henning for your replies! I'll study references you provided. -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID:???????056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From mail at doisinkidney.com Sun Jan 27 16:39:14 2019 From: mail at doisinkidney.com (=?utf-8?Q?Donnacha_Ois=C3=ADn_Kidney?=) Date: Sun, 27 Jan 2019 15:39:14 +0000 Subject: [Agda] Ring Solver (looking for feedback) Message-ID: <47AC4BB2-8463-4BE7-B522-73100EE67627@doisinkidney.com> https://oisdk.github.io/agda-ring-solver/README.html Hi all! For the past few months I?ve been working on a new ring solver to replace the one in the standard library. It?s part of my undergrad final year project, but I?m hoping to also submit it to a conference or something over the next few weeks. The focus is on ease-of-use, but it?s also faster than the old solver (on more complex equations?the base-level time to solve things like 1 ? 1 is ~5 seconds, versus the standard library?s ~2). At the moment, I?m the only person who?s used it, so I?m interested in hearing about more use cases and how it fits in. Also, any insight on type-checking performance would be great: the vast majority of speed gains in the solver came from places I wasn?t expecting (carefully arranging things to prevent reduction and encourage syntactic equality, for instance). Anyway, this is what the interface looks like: lemma : ? x y ? x + y * 1 + 3 ? 3 + 1 + y + x + - 1 lemma = solve Int.ring Ois?n Kidney. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Mon Jan 28 17:15:48 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Mon, 28 Jan 2019 19:15:48 +0300 Subject: [Agda] two items in standard Message-ID: <1548692148.2413.21.camel@one.mechvel.pereslavl.ru> Dear all, I have a question about Standard library (is it better to ask them on GitHub for stdlib?). I have two applications which can become proposals for Standard library. And they use the InequalityReasoning module by Ulf Norell. May be, Standard could somehow include this InequalityReasoning ? Regards, ------ Sergei From genestier at lsv.fr Tue Jan 29 13:57:34 2019 From: genestier at lsv.fr (Guillaume GENESTIER) Date: Tue, 29 Jan 2019 13:57:34 +0100 Subject: [Agda] Termination checker and rewriting Message-ID: <0f97b9cd-0d69-b199-2a51-74d2a1b2ac4e@lsv.fr> Dear all, I am looking for information about the checks performed when rewriting rules are declared in Agda. More specifically, I was wondering if any termination checking is performed on these rules. The only information I was able to find in the Agda manual is that the rewriting machinery is "experimental and totally unsafe". On the other hand, termination (and totality) checking is performed when a function is declared inductively. Faithfully yours, Guillaume Genestier, ENS Paris-Saclay and MINES ParisTech From nad at cse.gu.se Tue Jan 29 14:19:08 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Tue, 29 Jan 2019 14:19:08 +0100 Subject: [Agda] Termination checker and rewriting In-Reply-To: <0f97b9cd-0d69-b199-2a51-74d2a1b2ac4e@lsv.fr> References: <0f97b9cd-0d69-b199-2a51-74d2a1b2ac4e@lsv.fr> Message-ID: <9e871e88-38d7-5771-4d85-7679e27636e7@cse.gu.se> On 29/01/2019 13.57, Guillaume GENESTIER wrote: > More specifically, I was wondering if any termination checking is > performed on these rules. No. -- /NAD From Jesper at sikanda.be Tue Jan 29 15:42:25 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 29 Jan 2019 15:42:25 +0100 Subject: [Agda] Termination checker and rewriting In-Reply-To: <9e871e88-38d7-5771-4d85-7679e27636e7@cse.gu.se> References: <0f97b9cd-0d69-b199-2a51-74d2a1b2ac4e@lsv.fr> <9e871e88-38d7-5771-4d85-7679e27636e7@cse.gu.se> Message-ID: > > On 29/01/2019 13.57, Guillaume GENESTIER wrote: > > More specifically, I was wondering if any termination checking is > > performed on these rules. > > No. ... but if you are interested in working on implementing a termination checker for rewrite rules, send me a mail and let's talk. -- Jesper On Tue, Jan 29, 2019 at 2:19 PM Nils Anders Danielsson wrote: > On 29/01/2019 13.57, Guillaume GENESTIER wrote: > > More specifically, I was wondering if any termination checking is > > performed on these rules. > > No. > > -- > /NAD > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Tue Jan 29 15:47:14 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 29 Jan 2019 14:47:14 +0000 Subject: [Agda] Termination checker and rewriting In-Reply-To: References: <0f97b9cd-0d69-b199-2a51-74d2a1b2ac4e@lsv.fr> <9e871e88-38d7-5771-4d85-7679e27636e7@cse.gu.se> Message-ID: I guess this shouldn?t be just a checker but a way to prove externally that the system is terminating using agda. T. From: Agda on behalf of Jesper Cockx Date: Tuesday, 29 January 2019 at 14:42 To: Nils Anders Danielsson Cc: agda list Subject: Re: [Agda] Termination checker and rewriting On 29/01/2019 13.57, Guillaume GENESTIER wrote: > More specifically, I was wondering if any termination checking is > performed on these rules. No. ... but if you are interested in working on implementing a termination checker for rewrite rules, send me a mail and let's talk. -- Jesper On Tue, Jan 29, 2019 at 2:19 PM Nils Anders Danielsson > wrote: On 29/01/2019 13.57, Guillaume GENESTIER wrote: > More specifically, I was wondering if any termination checking is > performed on these rules. No. -- /NAD _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.allais at ens-lyon.org Tue Jan 29 18:50:37 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 29 Jan 2019 18:50:37 +0100 Subject: [Agda] Termination checker and rewriting In-Reply-To: References: <0f97b9cd-0d69-b199-2a51-74d2a1b2ac4e@lsv.fr> <9e871e88-38d7-5771-4d85-7679e27636e7@cse.gu.se> Message-ID: <2229b0c1-e88e-bf41-ed71-baffade4e826@ens-lyon.org> Let's not forget about confluence :) On 29/01/2019 15:47, Thorsten Altenkirch wrote: > I guess this shouldn?t be just a checker but a way to prove externally that the system is terminating using agda. > > T. > > From: Agda on behalf of Jesper Cockx > Date: Tuesday, 29 January 2019 at 14:42 > To: Nils Anders Danielsson > Cc: agda list > Subject: Re: [Agda] Termination checker and rewriting > > On 29/01/2019 13.57, Guillaume GENESTIER wrote: >> More specifically, I was wondering if any termination checking is >> performed on these rules. > > No. > > ... but if you are interested in working on implementing a termination checker for rewrite rules, send me a mail and let's talk. > > -- Jesper > > On Tue, Jan 29, 2019 at 2:19 PM Nils Anders Danielsson > wrote: > On 29/01/2019 13.57, Guillaume GENESTIER wrote: >> More specifically, I was wondering if any termination checking is >> performed on these rules. > > No. > > -- > /NAD > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From matthewdaggitt at gmail.com Wed Jan 30 11:25:07 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Wed, 30 Jan 2019 10:25:07 +0000 Subject: [Agda] two items in standard In-Reply-To: <1548692148.2413.21.camel@one.mechvel.pereslavl.ru> References: <1548692148.2413.21.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, See this PR (https://github.com/agda/agda-stdlib/pull/586) for an improved version of Ulf's reasoning. This will be included in the next release of the standard library (will be timed to coincide with Agda-2.6.0). I have a question about Standard library (is it better to ask them on > GitHub for stdlib?). > The rule for this is fairly easy. If the question is asking for help using the standard library then put the question on the mailing list. If it is a suggestion to change the standard library then it should go on Github. Best, Matthew On Mon, Jan 28, 2019 at 4:15 PM Sergei Meshveliani wrote: > Dear all, > > I have a question about Standard library > (is it better to ask them on GitHub for stdlib?). > > I have two applications which can become proposals for Standard > library. And they use the > InequalityReasoning > > module by Ulf Norell. > May be, Standard could somehow include this InequalityReasoning ? > > Regards, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Wed Jan 30 11:30:01 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Wed, 30 Jan 2019 10:30:01 +0000 Subject: [Agda] Fwd: Ring Solver (looking for feedback) In-Reply-To: References: <47AC4BB2-8463-4BE7-B522-73100EE67627@doisinkidney.com> Message-ID: Hi Oisin, This looks like great work! I'll try it out over the next couple of weeks. As mentioned before, please do feel free to start trying to incorporate it into the standard library (though it looks large enough that maybe splitting it over a few PRs might be wise!). Best, Matthew On Sun, Jan 27, 2019 at 3:39 PM Donnacha Ois?n Kidney wrote: > https://oisdk.github.io/agda-ring-solver/README.html > > Hi all! For the past few months I?ve been working on a new ring solver to > replace the one in the standard library. It?s part of my undergrad final > year project, but I?m hoping to also submit it to a conference or something > over the next few weeks. > > The focus is on ease-of-use, but it?s also faster than the old solver (on > more complex equations?the base-level time to solve things like 1 ? 1 is > ~5 seconds, versus the standard library?s ~2). > > At the moment, I?m the only person who?s used it, so I?m interested in > hearing about more use cases and how it fits in. Also, any insight on > type-checking performance would be great: the vast majority of speed gains > in the solver came from places I wasn?t expecting (carefully arranging > things to prevent reduction and encourage syntactic equality, for instance). > > Anyway, this is what the interface looks like: > > lemma : ? x y ? x + y * 1 + 3 ? 3 + 1 + y + x + - 1 > lemma = solve Int.ring > > Ois?n Kidney. > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Wed Jan 30 13:55:41 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 30 Jan 2019 15:55:41 +0300 Subject: [Agda] interactive Bin arith performance Message-ID: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> People, I see a strangely slow evaluation of the Bin arithmetic in the interactive type checking under emacs: test1 : let b = stringToBin "1000001000" in rem b 10' (?()) ? 0# test1 = refl This is actually proving the equality 520 modulo 10 ? 0, where the data are represented in the binary system. stringToBin is evaluated fast, and all the rest takes 28 sec. And when it is compiled, and "1000001000" is input from file, and the result (rem b 10' (?())) is printed out, this input + evaluation + output takes 0.002 sec. This makes it 14000 times speed up. rem is a part of divMod for binary naturals. I use my own Bin library, the representation is similar as the one that Martin Escardo introduced. This is going to be Binary-4.2. There I try to change the definition for _<_ and implementation for _<-cmp_ for Bin. This may lead to some adventures in performance, it needs investigation. But why the same method is 14000 times faster when compiled? Can this slow down be natural, or there is something strange in the type checker? This is on Development Agda of January 2, 2019. I cannot reproduce the example in Standard Bin, because it has not divMod. Regards, ------ Sergei From mechvel at botik.ru Wed Jan 30 18:14:02 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 30 Jan 2019 20:14:02 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> Message-ID: <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> On Wed, 2019-01-30 at 15:55 +0300, Sergei Meshveliani wrote: > People, > > I see a strangely slow evaluation of the Bin arithmetic in the > interactive type checking under emacs: > > test1 : let b = stringToBin "1000001000" in rem b 10' (?()) ? 0# > test1 = refl > > This is actually proving the equality 520 modulo 10 ? 0, > > where the data are represented in the binary system. > > stringToBin is evaluated fast, and all the rest takes 28 sec. > > And when it is compiled, and "1000001000" is input from file, > and the result (rem b 10' (?())) is printed out, > this input + evaluation + output takes > 0.002 sec. > > This makes it 14000 times speed up. Now I set a more precise test: test0 : Bin test0 = let b = stringToBin "1000001000" in rem b 10' (?()) and evaluate test0 in interpreter by C-c C n. This takes 20 sec. So that the performance ratio is 10.000. The matter is in equational provers. There are possible provers basing on certain computations with polynomials over rational numbers, and such. And such a computation happens during the type check. With this 10.000 slow down, such a prover is greatly restricted in its application. -- SM > rem is a part of divMod for binary naturals. > I use my own Bin library, the representation is similar as the one that > Martin Escardo introduced. > > This is going to be Binary-4.2. There I try to change the definition for > _<_ and implementation for _<-cmp_ for Bin. > This may lead to some adventures in performance, it needs investigation. > > But why the same method is 14000 times faster when compiled? > Can this slow down be natural, or there is something strange in the type > checker? > > This is on Development Agda of January 2, 2019. > > I cannot reproduce the example in Standard Bin, because it has not > divMod. > > > Regards, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mechvel at botik.ru Wed Jan 30 22:58:29 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 31 Jan 2019 00:58:29 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> Message-ID: <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> On Wed, 2019-01-30 at 20:14 +0300, Sergei Meshveliani wrote: > > On Wed, 2019-01-30 at 15:55 +0300, Sergei Meshveliani wrote: > > People, > > > > I see a strangely slow evaluation of the Bin arithmetic in the > > interactive type checking under emacs: > > > > test1 : let b = stringToBin "1000001000" in rem b 10' (?()) ? 0# > > test1 = refl > > > > This is actually proving the equality 520 modulo 10 ? 0, > > > > where the data are represented in the binary system. > > > > stringToBin is evaluated fast, and all the rest takes 28 sec. > > > > And when it is compiled, and "1000001000" is input from file, > > and the result (rem b 10' (?())) is printed out, > > this input + evaluation + output takes > > 0.002 sec. > > > > This makes it 14000 times speed up. > > > Now I set a more precise test: > > test0 : Bin > test0 = let b = stringToBin "1000001000" in rem b 10' (?()) > > and evaluate test0 in interpreter by C-c C n. > This takes 20 sec. > So that the performance ratio is 10.000. > Suppose that the module M1 is imported in M2.agda, and the function f is implemented in M1. Then M2 is loaded by C-c C-l, and it is evaluated in the interpreter the term M1.f by the command C-c C-n. Does it make difference for performance whether the module M1.agda is previously compiled or not? (I have an impression that it is equally slow). Thanks, ------ Sergei > > > rem is a part of divMod for binary naturals. > > I use my own Bin library, the representation is similar as the one that > > Martin Escardo introduced. > > > > This is going to be Binary-4.2. There I try to change the definition for > > _<_ and implementation for _<-cmp_ for Bin. > > This may lead to some adventures in performance, it needs investigation. > > > > But why the same method is 14000 times faster when compiled? > > Can this slow down be natural, or there is something strange in the type > > checker? > > > > This is on Development Agda of January 2, 2019. > > > > I cannot reproduce the example in Standard Bin, because it has not > > divMod. > > > > > > Regards, > > > > ------ > > Sergei > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > From joshs at mail2000.com.tw Thu Jan 31 02:20:33 2019 From: joshs at mail2000.com.tw (Josh Ko) Date: Thu, 31 Jan 2019 10:20:33 +0900 Subject: [Agda] Bx 2019 Second Call for Papers (Workshop on Bidirectional Transformations) Message-ID: <77564505-BBFF-4580-B250-EE21ABEECCDD@mail2000.com.tw> Bx 2019: 8th International Workshop on Bidirectional Transformations ==================================================================== Highlights: - workshop date set on June 4, 2019 - Zachary Ives confirmed as invited speaker - abstract submission in two weeks (Tuesday, Feb 12, AoE) - links to CEUR-WS.org style and template files updated * http://bx-community.wikidot.com/bx2019:home * June 4, 2019, Saint Joseph?s University, Philadelphia, PA, USA * as part of Philadelphia Logic Week (PLW) 2019: https://sites.sju.edu/plw/ * Invited speaker: Zachary Ives (University of Pennsylvania) Bidirectional transformations (bx) are a mechanism for maintaining the consistency of at least two related sources of information. Such sources can be relational databases, software models and code, or any other document following standard or ad-hoc formats. Bx are an emerging topic in a wide range of research areas, with prominent presence at top conferences in several different fields (namely databases, programming languages, software engineering, and graph transformation), but with results in one field often getting limited exposure in the others. Bx 2019 is a dedicated venue for bx in all relevant fields, and is part of a workshop series that was created in order to promote cross-disciplinary research and awareness in the area. As such, since its beginning in 2012, the workshop has rotated between venues in different fields. Bx 2019 will be a part of Philadelphia Logic Week (PLW) 2019, which also includes conference and workshops on logic, provenance, and databases, topics that we hope will complement Bx and help build engagement with these communities. Important Dates =============== - Abstract submission: Feb 12 (AoE) - Paper submission: Feb 19 (AoE) - Author notification: Apr 8 - Camera-ready: around May 1 - Workshop: Jun 4, 2019 Aims and Topics =============== The aim of the workshop is to bring together researchers and practitioners, established and new, interested in bx from different perspectives, including but not limited to: - bidirectional programming languages and frameworks - data and model synchronization - view updating - inter-model consistency analysis and repair - data/schema (or model/metamodel) co-evolution - coupled software/model transformations - inversion of transformations and data exchange mappings - domain-specific languages for bx - analysis and classification of requirements for bx - bridging the gap between formal concepts and application scenarios - analysis of efficiency of transformation algorithms and benchmarks - survey and comparison of bx technologies - case studies and tool support Submission Guidelines ===================== Papers must follow the CEUR-WS.org one-column style (with page numbers) available at - http://ceur-ws.org/Vol-XXX/samplestyles/onecolpceurws.sty and must be submitted via EasyChair: - https://www.easychair.org/conferences/?conf=bx2019 A sample LaTeX file using the above style (along with an included sample image) can be downloaded at - http://ceur-ws.org/Vol-XXX/samplestyles/paper1p.tex - http://ceur-ws.org/Vol-XXX/samplestyles/fig1.eps Five categories of submissions are considered: * Full Research Papers (up to 15 pages) - in-depth presentations of novel concepts and results - applications of bx to new domains - survey papers providing novel comparisons between existing bx technologies and approaches case studies * Tool Papers (up to 8 pages) - guideline papers presenting best practices for employing a specific bx approach (with a specific tool) - presentation of new tools or substantial improvements to existing ones - qualitative and/or quantitative comparisons of applying different bx approaches and tools * Experience Report (up to 8 pages) - sharing experiences and lessons learned with bx tools/frameworks/languages - how bx is used in (research/industrial/educational) projects * Extended Abstracts and Short Papers (up to 4 pages) - work in progress - small focused contributions - position papers and research perspectives - critical questions and challenges for bx * Talk Proposals (up to 2 pages) - proposed lectures about topics of interest for bx - existing work representing relevant contributions for bx - promising contributions that are not mature enough to be proposed as papers of the other categories If your submission is not a Full Research Paper, please include the intended submission category in the Title field of EasyChair?s submission form. The bibliography is excluded from the page limits. All papers are expected to be self-contained and well-written. Tool papers are not expected to present novel scientific results, but to document artifacts of interest and share bx experience/best practices with the community. Experience papers are expected to report on lessons learnt from applying bx approaches, languages, tools, and theories to practical application case studies. Extended abstracts should primarily provoke interesting discussion at the workshop and will not be held to the same standard of maturity as regular papers; short papers contain focused results, positions or perspectives that can be presented in full in just a few pages, and that correspondingly contain fewer results and that therefore might not be competitive in the full paper category. Talk proposals are expected to present work that is of particular interest to the community and worth a talk slot at the workshop. We strongly encourage authors to ensure that any (variants of) examples are present in the bx example repository at the time of submission, and for tool papers, to allow for reproducibility with minimal effort, either via a virtual machine (e.g., via Share - http://share20.eu) or a dedicated website with relevant artifacts and tool access. All papers will be peer-reviewed by at least three members of the program committee. If a paper is accepted, one author of the paper is expected to participate in the workshop to present it. Authors of accepted tool papers are also expected to be available to demonstrate their tool at the event. Proceedings and Special Issue ============================= The workshop proceedings, including all accepted papers (except talk proposals), will be published electronically by CEUR-WS.org. A special issue open to all authors of papers in BX workshops over the past few years is planned. Program committee ================= * Co-chairs - James Cheney, University of Edinburgh, UK - Hsiang-Shang ?Josh? Ko, National Institute of Informatics, Japan * Members - Leopoldo Bertossi, Carleton University, Canada - Ravi Chugh, University of Chicago, US - Zinovy Diskin, McMaster University, Canada - Paolo Guagliardo, University of Edinburgh, UK - Jules Hedges, University of Oxford, UK - Michael Johnson, Macquarie University, Australia - Leen Lambers, Hasso Plattner Institute, University of Potsdam, Germany - Kazutaka Matsuda, Tohoku University, Japan - Anders Miltner, Princeton University, US - Alfonso Pierantonio, University of L'Aquila, Italy - Perdita Stevens, University of Edinburgh, UK - Daniel Str?ber, University of Koblenz and Landau, Germany - Manuel Wimmer, Vienna University of Technology, Austria - Nicolas Wu, University of Bristol, UK From apostolis.xekoukoulotakis at gmail.com Thu Jan 31 04:04:40 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Thu, 31 Jan 2019 05:04:40 +0200 Subject: [Agda] How to write proofs by Leslie Lamport : Hierarchical structures Message-ID: https://lamport.azurewebsites.net/pubs/proof.pdf What Leslie describes can easily be done in agda. One needs to use "where" extensively to define local lemmas. We need to improve the "C-h" command that extracts the type of the lemma from holes. And secondly, be able to hide the proofs of the lemmas so as not to clatter the proof. I would personally also use postulates inside "where" for simple things. ``` open import Data.Nat hiding (_?_) open import Relation.Binary.PropositionalEquality f : ? ? ? f k = {!!} where postulate g : k + k ? 2 * k ``` -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Thu Jan 31 07:03:16 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Thu, 31 Jan 2019 07:03:16 +0100 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> Message-ID: On Wed, Jan 30, 2019 at 10:58 PM Sergei Meshveliani wrote: > > Does it make difference for performance whether the module M1.agda is > previously compiled or not? > (I have an impression that it is equally slow). > It makes no difference. / Ulf -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Jan 31 12:11:53 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 31 Jan 2019 14:11:53 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> Message-ID: <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> On Thu, 2019-01-31 at 07:03 +0100, Ulf Norell wrote: > On Wed, Jan 30, 2019 at 10:58 PM Sergei Meshveliani > wrote: > > > Does it make difference for performance whether the module > M1.agda is previously compiled or not? > (I have an impression that it is equally slow). > > > It makes no difference. I see. The remaining question is: why 10.000 slow down? A particular method applied to division of 520 by 10 in binary system with a particular representation shows this ratio. Other examples, like 10^4 - 10^3, show a small ratio, I do not recall, somewhat from 10 to 50, this latter ratio looks natural. If Agda developers ask, I can provide the code of this binary-4.2-pre: ?bout 10 .agda files, the size of zip file about 40 ?b. (divMod uses all these modules). My hope was as follows. An equational prover in the project is going to be based on functions of computer algebra, like, say, divMod for binary numbers, a bit more complex. Their evaluation takes most of the cost in the proof search. Approach (I): if the type checker interprets these functions about 100 times slower than the compiled functions run, then this can be tolerable. But 10.000 slow down will make the approach practically useless. Approach (II): a certain basic function in the prover is compiled, and the interpreter in the type checker needs to be able to run fast a compiled function (for example, this is possible in Glasgow Haskell). Approach (III): a basic function f is in Haskell, and it is a fixed function that makes almost all the prover. It is compiled once by GHC, and is ready to run fast. It takes and returns the data like, say List (List Bin), and this needs to be by the interface between Agda data and Haskell data. The prover takes the returned result : List (List Bin), and the rest proof search is not expensive, it is interpreted by the type checker. The best one is (II). But I do not know what problems the Agda project will have to solve for (II). If (I) and (II) fail, then consider (III). I have a large library being run under GHC. And it only remains to arrange an interface like List (List Bin) -- [[Bin]] -- something of this kind. I wonder of whether such an interface can be set. And (III) still does not look nice, it can be considered as a temporary solution. Regards, ------ Sergei From ulf.norell at gmail.com Thu Jan 31 12:13:56 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Thu, 31 Jan 2019 12:13:56 +0100 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> Message-ID: Without looking at the code my guess would be that you are strict in the proof objects. At runtime (after compilation) the proof objects are erased and not evaluated, but at compile time you evaluate the generated proofs, causing the terrible performance. / Ulf On Thu, Jan 31, 2019 at 12:11 PM Sergei Meshveliani wrote: > On Thu, 2019-01-31 at 07:03 +0100, Ulf Norell wrote: > > On Wed, Jan 30, 2019 at 10:58 PM Sergei Meshveliani > > wrote: > > > > > > Does it make difference for performance whether the module > > M1.agda is previously compiled or not? > > (I have an impression that it is equally slow). > > > > > > It makes no difference. > > > I see. > The remaining question is: why 10.000 slow down? > A particular method applied to division of 520 by 10 in binary system > with a particular representation shows this ratio. > Other examples, like 10^4 - 10^3, show a small ratio, I do not recall, > somewhat from 10 to 50, this latter ratio looks natural. > > > If Agda developers ask, I can provide the code of this binary-4.2-pre: > ?bout 10 .agda files, the size of zip file about 40 ?b. > (divMod uses all these modules). > > > My hope was as follows. An equational prover in the project is going to > be based on functions of computer algebra, like, say, divMod for binary > numbers, a bit more complex. > Their evaluation takes most of the cost in the proof search. > > Approach (I): > if the type checker interprets these functions about 100 times slower > than the compiled functions run, then this can be tolerable. > But 10.000 slow down will make the approach practically useless. > > Approach (II): > a certain basic function in the prover is compiled, and the interpreter > in the type checker needs to be able to run fast a compiled function > (for example, this is possible in Glasgow Haskell). > > Approach (III): > a basic function f is in Haskell, and it is a fixed function that > makes almost all the prover. It is compiled once by GHC, and is ready to > run fast. It takes and returns the data like, say List (List Bin), > and this needs to be by the interface between Agda data and Haskell > data. The prover takes the returned result : List (List Bin), > and the rest proof search is not expensive, it is interpreted by the > type checker. > > The best one is (II). But I do not know what problems the Agda project > will have to solve for (II). > > If (I) and (II) fail, then consider (III). > I have a large library being run under GHC. And it only remains to > arrange an interface like List (List Bin) -- [[Bin]] > -- something of this kind. > I wonder of whether such an interface can be set. > And (III) still does not look nice, it can be considered as a temporary > solution. > > Regards, > > ------ > Sergei > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Jan 31 16:40:03 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 31 Jan 2019 18:40:03 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> Message-ID: <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> On Thu, 2019-01-31 at 12:13 +0100, Ulf Norell wrote: > Without looking at the code my guess would be that you are strict in > the proof objects. At runtime (after compilation) the proof objects > are erased and not evaluated, but at compile time you evaluate the > generated proofs, causing the terrible performance. > Well, DivRem data has two proofs in it, and divRem for Bin is defined recursively, similarly as by the construction of the bit list. How large can be a proof for that 520 == 52 * 10 + 0 in binary system? I expect that in recursion there appear (log 520 =~ 9) of such proofs. There are also proofs for r < 10 -- less than 5 steps for binary system -- something like comparing bit lists lexicographically. If all of them are computed strict, I still doubt about their great cost. Because their data look small in size. Also why strict? Is not Agda lazy? Well, divRem 520 10 calls for something like divRem 520/2 10. Then, q1, r1, and proofs for p11 : 520 = q1*10 + r1, p12 : r1 < 10 for binary codes are being restored in a simple way from q2, r2, and the proofs for p21 : 520/2 = q2*10 + r2, p22 : r2 < 10. p11 and p12 computed from p21, p22. Do you mean that this forces unwinding all the structure of pij, and in these sense the method is ``strict in the proof objects'' ? > At runtime (after compilation) the proof objects are erased and not > evaluated Probably, this is not for the general case (?). For example, for p : 100 < (101 : Nat) p = s<=s (s<=s (s<=s (s<=s ... the proof p will be evaluated in a compiled program, if the main function prints p. Do I understand correct? And in my example of test0 = remainder (divRem 520 10), proofs are not evaluated in the compiled program. Now, return to Agda interpreter. Before C-c C-n test0, there has been applied C-c C-l. And this type-checks everything in all the related .agda modules. (Suppose for simplicity that we have all the library in a large single module.) Hence it is already known, which proofs need to be evaluated in order to print out test0. Is it so? And it is known that no proofs need to be evaluated for the main goal of test0. Why C-c C-n test0 evaluates some proofs here? Thanks, ------ Sergei > > On Thu, Jan 31, 2019 at 12:11 PM Sergei Meshveliani > wrote: > > On Thu, 2019-01-31 at 07:03 +0100, Ulf Norell wrote: > > On Wed, Jan 30, 2019 at 10:58 PM Sergei Meshveliani > > > wrote: > > > > > > Does it make difference for performance whether the > module > > M1.agda is previously compiled or not? > > (I have an impression that it is equally slow). > > > > > > It makes no difference. > > > I see. > The remaining question is: why 10.000 slow down? > A particular method applied to division of 520 by 10 in binary > system > with a particular representation shows this ratio. > Other examples, like 10^4 - 10^3, show a small ratio, I do > not recall, > somewhat from 10 to 50, this latter ratio looks natural. > > > If Agda developers ask, I can provide the code of this > binary-4.2-pre: > ?bout 10 .agda files, the size of zip file about 40 ?b. > (divMod uses all these modules). > > > My hope was as follows. An equational prover in the project is > going to > be based on functions of computer algebra, like, say, divMod > for binary > numbers, a bit more complex. > Their evaluation takes most of the cost in the proof search. > > Approach (I): > if the type checker interprets these functions about 100 times > slower > than the compiled functions run, then this can be tolerable. > But 10.000 slow down will make the approach practically > useless. > > Approach (II): > a certain basic function in the prover is compiled, and the > interpreter > in the type checker needs to be able to run fast a compiled > function > (for example, this is possible in Glasgow Haskell). > > Approach (III): > a basic function f is in Haskell, and it is a fixed function > that > makes almost all the prover. It is compiled once by GHC, and > is ready to > run fast. It takes and returns the data like, say List (List > Bin), > and this needs to be by the interface between Agda data and > Haskell > data. The prover takes the returned result : List (List > Bin), > and the rest proof search is not expensive, it is interpreted > by the > type checker. > > The best one is (II). But I do not know what problems the Agda > project > will have to solve for (II). > > If (I) and (II) fail, then consider (III). > I have a large library being run under GHC. And it only > remains to > arrange an interface like List (List Bin) -- [[Bin]] > -- something of this kind. > I wonder of whether such an interface can be set. > And (III) still does not look nice, it can be considered as a > temporary > solution. > > Regards, > > ------ > Sergei > From ulf.norell at gmail.com Thu Jan 31 17:49:48 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Thu, 31 Jan 2019 17:49:48 +0100 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> Message-ID: On Thu, Jan 31, 2019 at 4:40 PM Sergei Meshveliani wrote: > On Thu, 2019-01-31 at 12:13 +0100, Ulf Norell wrote: > > Without looking at the code my guess would be that you are strict in > > the proof objects. At runtime (after compilation) the proof objects > > are erased and not evaluated, but at compile time you evaluate the > > generated proofs, causing the terrible performance. > > > > Well, DivRem data has two proofs in it, and divRem for Bin is defined > recursively, similarly as by the construction of the bit list. > How large can be a proof for that 520 == 52 * 10 + 0 in binary system? > I expect that in recursion there appear (log 520 =~ 9) of such proofs. > There are also proofs for r < 10 -- less than 5 steps for binary > system -- something like comparing bit lists lexicographically. > > If all of them are computed strict, I still doubt about their great > cost. Because their data look small in size. > The cost of running an algorithm is not related to the size of the output, or the whole P vs NP thing would be kind of silly. > Also why strict? Is not Agda lazy? > A function can still be strict in some arguments even with lazy evaluation. > Well, divRem 520 10 calls for something like divRem 520/2 10. > Then, q1, r1, and proofs for > p11 : 520 = q1*10 + r1, p12 : r1 < 10 > > for binary codes are being restored in a simple way from q2, r2, and > the proofs for > p21 : 520/2 = q2*10 + r2, p22 : r2 < 10. > > p11 and p12 computed from p21, p22. > Do you mean that this forces unwinding all the structure of pij, > and in these sense the method is ``strict in the proof objects'' ? > Yes. > > At runtime (after compilation) the proof objects are erased and not > > evaluated > > Probably, this is not for the general case (?). > For example, for > p : 100 < (101 : Nat) > p = s<=s (s<=s (s<=s (s<=s ... > > the proof p will be evaluated in a compiled program, if the main > function prints p. > Do I understand correct? > Indeed. But equality proofs are erased. The _<_ proof may or may not be erased depending on how you defined it. > And in my example of test0 = remainder (divRem 520 10), > > proofs are not evaluated in the compiled program. > > Now, return to Agda interpreter. > Before > C-c C-n test0, > > there has been applied C-c C-l. And this type-checks everything in all > the related .agda modules. > (Suppose for simplicity that we have all the library in a large single > module.) > Hence it is already known, which proofs need to be evaluated in order to > print out test0. > Is it so? > No. Type checking doesn't do any analysis of this sort. > > And it is known that no proofs need to be evaluated for the main goal of > test0. Why > C-c C-n test0 > > evaluates some proofs here? > How is it known that no proofs need to be evaluated for test0? C-c C-n runs the compile-time evaluator, which is what the type checker uses when evaluating terms for type checking. This evaluator does not have the same freedoms when it comes to erasing proof objects as the run-time code generator. In particular it needs to evaluate equality proofs if they are matched on, to avoid looping on inconsistent assumptions. / Ulf -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Jan 31 17:53:21 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 31 Jan 2019 19:53:21 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> Message-ID: <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> On Thu, 2019-01-31 at 18:40 +0300, Sergei Meshveliani wrote: > > And in my example of test0 = remainder (divRem 520 10), > proofs are not evaluated in the compiled program. > > Now, return to Agda interpreter. > [..] Consider a more clear example of test1: -- of Binary-4.2 --------------------------------------------------- open import Binary using (Bin; 0#; 1#; 2#; 3#; 4#; 5#; _+_; DivMod; divMod; rem) 10' : Bin 10' = 5# + 5# -- test0 = let b = stringToBin "1000001000" in rem b 10' (?()) test1 : String ? Bin test1 str = let b = stringToBin str in rem b 10' (?()) ------------------------------------------------------------- First, C-c C-l is applied. rem is here remainder (divRem b 10' _). test1 is type-checked, together with all functions needed for divRem. Is it known after this that no proofs need to be evaluated for evaluation of test1 ? Then, C-c C-n (test1 "1000001000") takes 20 seconds, which is 10.000 times longer than for the compiled program. So that, probably, proofs were evaluated here. Why it is so? Am I missing something? Thanks, ------ Sergei From ulf.norell at gmail.com Thu Jan 31 18:14:31 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Thu, 31 Jan 2019 18:14:31 +0100 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> Message-ID: On Thu, Jan 31, 2019 at 5:53 PM Sergei Meshveliani wrote: > On Thu, 2019-01-31 at 18:40 +0300, Sergei Meshveliani wrote: > > > > > And in my example of test0 = remainder (divRem 520 10), > > proofs are not evaluated in the compiled program. > > > > Now, return to Agda interpreter. > > [..] > > > Consider a more clear example of test1: > > > -- of Binary-4.2 --------------------------------------------------- > open import Binary using (Bin; 0#; 1#; 2#; 3#; 4#; 5#; _+_; > DivMod; divMod; rem) > 10' : Bin > 10' = 5# + 5# > > -- test0 = let b = stringToBin "1000001000" in rem b 10' (?()) > > test1 : String ? Bin > test1 str = > let b = stringToBin str in rem b 10' (?()) > ------------------------------------------------------------- > > > First, C-c C-l is applied. > rem is here remainder (divRem b 10' _). > > test1 is type-checked, together with all functions needed for divRem. > > Is it known after this that no proofs need to be evaluated for > evaluation of test1 ? No, why would you think that? Also it's not clear what you mean by "evaluation of test1". Do you mean using the compile-time evaluator, running the compiled code, or some hypothetical ideal evaluator. / Ulf -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Fri Feb 1 03:02:01 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 1 Feb 2019 02:02:01 +0000 Subject: [Agda] Midlands Graduate School 2019 in the Foundations of Computing Science Message-ID: Midlands Graduate School 2019 14-18 April 2019, Birmingham, UK http://events.cs.bham.ac.uk/mgs2019/ BACKGROUND: The Midlands Graduate School (MGS) in the Foundations of Computing Science provides an intensive course of lectures on the mathematical foundations of computing. The MGS has been running since 1999, and is aimed at PhD students in their first or second year of study, but the school is open to everyone, and has increasingly seen participation from industry. We welcome participants from all over the world! COURSES: Eight courses will be given. Participants usually take all the introductory courses and choose additional options from the advanced courses depending on their interests. Invited course - Adventures in Property Based Testing, John Hughes Introductory courses - Lambda Calculus, Venanzio Capretta - Category Theory, Thorsten Altenkirch - Univalent Type Theory in Agda, Mart?n Escard? Advanced courses - Calculating programs, Jennifer Hackett - Type Refinement Systems, Noam Zeilberger - Synthesis of Reactive Systems, Rayna Dimitrova - Monoidal Categories, Higher Categories, Jamie Vicary REGISTRATION: Registration is ?220 for student, academic and independent participants, and ?420 for industry participants. Accommodation is not included; please see the conference webpage for advice. The registration deadline is ** Sunday, 31 March **. Spaces are limited, so please register early to secure your place. SPONSORSHIP: We offer a range of sponsorship opportunities for industry (bronze, silver, gold and platinum), each with specific benefits. Please see the website for further details. From frederic.blanqui at inria.fr Fri Feb 1 08:35:54 2019 From: frederic.blanqui at inria.fr (=?UTF-8?B?RnLDqWTDqXJpYyBCbGFucXVp?=) Date: Fri, 1 Feb 2019 08:35:54 +0100 Subject: [Agda] Announcement: 11th International School on Rewriting (ISR'19), 1-6 July 2019, MINES ParisTech, France In-Reply-To: References: Message-ID: -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ???? 11th International School on Rewriting (ISR'19) ???????? 1-6 July 2019, MINES ParisTech, France ?????????????? https://isr2019.inria.fr/ -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Rewriting is a simple yet powerful model of computation with numerous applications in computer science and many other fields: logic, mathematics, programming languages, model checking, quantum computing, biology, music... ISR'19 is hosted in the center of Paris and proposes to master students, PhD students and researchers, two parallel tracks: - basic track: introduction to first-order term rewriting and ?-calculus ? with lectures by Aart Middeldorp, Sarah Winkler and Femke van Raamsdonk - advanced track: lectures on rewriting theory and applications ??? . Automated complexity analysis of term rewrite systems, Martin Avanzini ??? . Reachability in logically constrained term rewriting systems, ?tefan Ciob?c? ??? . Deduction modulo rewriting, Gilles Dowek ??? . Introduction to graph rewriting, Rachid Echahed ??? . Rewriting and music, Florent Jacquemard ??? . Picturing quantum processes, rewriting quantum pictures, Aleks Kissinger ??? . Stochastic graph rewriting and (executable) knowledge representation for molecular biology, Jean Krivine ??? . Higher-order term rewriting, Cynthia Kop ??? . Homotopy and homology of rewriting, Yves Lafont ??? . Rewriting in theorem proving, Christopher Lynch ??? . Formal specification and analysis of real-time systems in Real-Time Maude, Peter Csaba ?lveczky ??? . Infinitary rewriting and streams, Hans Zantema Registration will open in March. The organizers are Fr?d?ric Blanqui (INRIA, LSV and ENS Paris-Saclay) and Olivier Hermant (MINES ParisTech). -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ISR'19 is promoted by the IFIP WG1.6 and supported by RFSI, R?gion Ile-de-France, INRIA, LSV and CNRS. From mechvel at botik.ru Fri Feb 1 10:50:01 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 01 Feb 2019 12:50:01 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> Message-ID: <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> On Thu, 2019-01-31 at 18:14 +0100, Ulf Norell wrote: > [..] > test1 : String ? Bin > test1 str = > let b = stringToBin str in rem b 10' (?()) > ------------------------------------------------------------- > > > First, C-c C-l is applied. > rem is here remainder (divRem b 10' _). > > test1 is type-checked, together with all functions needed for > divRem. > > Is it known after this that no proofs need to be evaluated for > evaluation of test1 ? > > > No, why would you think that? Also it's not clear what you mean by > "evaluation of test1". > Do you mean using the compile-time evaluator, running the compiled > code, or some hypothetical ideal evaluator. > Sorry, I need to understand this feature. Earlier I ignored it, because I considered the performance of the compiled code. Can anybody, please, explain what is happening in the below simple and self-contained example? ----------------------------------------------------------------- f : (m : ?) ? ? (\n ? n ? m) f 0 = (0 , ?-refl) f (suc m) = let (n , n?m) = f m in case suc n ?? m of \ { (yes _) ? (n , ?-step n?m) ; (no _ ) ? (suc n , s?s n?m) } g = proj? ? f ----------------------------------------------------------------- emacs, C-c C-l g 22 is evaluated in 25 sec. C-c C-l g 25 takes very long, I have interrupted it. Is it due to the proof part evaluation? If the module (Foo.agda) is complied, and m is read from the file data.txt, then ./Foo evaluates about 10.000 times faster than the interpreted g. Still the evaluation cost of the compiled code looks as quadratic. I think, this is because k ?? l is solved m times for k having k `suc' constructors for k = 0, ..., m. Does the compiled g evaluate proofs? If not, then who has removed the proof evaluation part (PEP) from the code? Type checking produces Foo.agdai which has PEP, MAlonzo takes Foo.agdai, compiles to Haskell with removing the PEP, and Foo.hs does not have PEP -- is this so? I attach the module that also includes the `main' function. The code for g is small, and all the rest is for parsing of a String to Nat (is such parsing somewhere in standard library?). Thanks, ------ Sergei -------------- next part -------------- open import Foreign.Haskell open import IO.Primitive open import Data.String as Str using (String) open import Codata.Musical.Costring using (toCostring) open import Function using (_?_; case_of_) open import Relation.Nullary using (yes; no) open import Relation.Unary using (Decidable) open import Relation.Binary.PropositionalEquality using (_?_; sym; subst) open import Data.Product using (_?_; _,_; _,?_; proj?; proj?; ?) open import Data.Nat using (?; suc; _+_; _?_; _*_; _?_; z?n; s?s; _??_) open import Data.Nat.Properties using (?-refl; ?-step; +-mono-?; *-distrib?-+; module ?-Reasoning) open ?-Reasoning open import Data.List using (List; []; _?_; reverse; map; filter) open import Data.Char as Char using (Char) import Data.Nat.Show as NatShow ------------------------------------------------------------------- -- This is for reading from String to ?. -- Has standard something for this? isDecimapDigit : Char ? Set isDecimapDigit c = 48 ? n ? n ? 57 where n = Char.toNat c decimalDigit? : Decidable isDecimapDigit decimalDigit? c = let n = Char.toNat c in case ((48 ?? n) ,? (n ?? 57)) of \ { (yes le , yes le') ? yes (le , le') ; (no 48?n , _ ) ? no (48?n ? proj?) ; (_ , no n?57) ? no (n?57 ? proj?) } charToDecDigitNat : Char -> ? charToDecDigitNat c = (Char.toNat c) ? 48 readNat : List Char -> ? -- convert from decimal digit chars readNat = toN ? map charToDecDigitNat ? reverse where toN : List ? -> ? toN [] = 0 toN (j ? js) = j + (10 * (toN js)) stringToNat : String ? ? stringToNat = readNat ? Str.toList filterStr : ? {p} {P : Char ? Set p} ? Decidable P ? String ? String filterStr P? = Str.fromList ? filter P? ? Str.toList ------------------------------------------------------------------- f : (m : ?) ? ? (\n ? n ? m) f 0 = (0 , ?-refl) f (suc m) = let (n , n?m) = f m in case suc n ?? m of \ { (yes _) ? (n , ?-step n?m) ; (no _ ) ? (suc n , s?s n?m) } g = proj? ? f -- g 22 | 25 sec. main = (readFiniteFile "data.txt") >>= putStrLn ? toCostring ? h where h : String ? String h = NatShow.show ? g ? stringToNat ? filterStr decimalDigit? From ulf.norell at gmail.com Fri Feb 1 11:44:52 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Fri, 1 Feb 2019 11:44:52 +0100 Subject: [Agda] interactive Bin arith performance In-Reply-To: <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> Message-ID: On Fri, Feb 1, 2019 at 10:50 AM Sergei Meshveliani wrote: > Can anybody, please, explain what is happening in the below simple and > self-contained example? > > ----------------------------------------------------------------- > f : (m : ?) ? ? (\n ? n ? m) > > f 0 = (0 , ?-refl) > f (suc m) = let (n , n?m) = f m > in > case suc n ?? m of \ > { (yes _) ? (n , ?-step n?m) > ; (no _ ) ? (suc n , s?s n?m) } > > g = proj? ? f > ----------------------------------------------------------------- > > emacs, C-c C-l > g 22 > > is evaluated in 25 sec. > In this case the problem isn't proof evaluation, but the 'let' which doesn't share evaluation of the right-hand side. This means that every occurrence of `n` corresponds to a new call to `f`, making it exponential. If you change `f` to f 0 = (0 , ?-refl) f (suc m) = case f m of ? where (n , n?m) ? case suc n ?? m of \ { (yes _) ? (n , ?-step n?m) ; (no _ ) ? (suc n , s?s n?m) } it runs fast (or as fast as the unary implementation of ?? allows). > Still the evaluation cost of the compiled code looks as quadratic. > I think, this is because k ?? l is solved m times for k having k > `suc' constructors for k = 0, ..., m. > Indeed. _??_ is linear in the value of the first argument. > Does the compiled g evaluate proofs? > If not, then who has removed the proof evaluation part (PEP) > from the code? > > Type checking produces Foo.agdai which has PEP, > MAlonzo takes Foo.agdai, compiles to Haskell with removing the PEP, > and Foo.hs does not have PEP > -- is this so? Essentially yes, but the erasure actually happens when compiling the type checked code to an intermediate language (called treeless), which the GHC backend then turns into Haskell code. Also it's a bit misleading to talk about proof evaluation, since there is no clear distinction between proofs and terms in Agda. / Ulf -------------- next part -------------- An HTML attachment was scrubbed... URL: From palmgren at math.su.se Fri Feb 1 11:47:13 2019 From: palmgren at math.su.se (Erik Palmgren) Date: Fri, 1 Feb 2019 11:47:13 +0100 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> Message-ID: Does any know if there is some way of temporarily hiding parts of proofs in Emacs Agda mode? Maybe some general feature of Emacs can do that? For instance, it would be useful to hide definiens/proofs when browsing Agda files. I seem to recall that there was such a feature in Alfa a GUI for Agda 1, which was very useful . In e.g. Mathematica there is also a convenient section system, where parts can be hidden or folded away with a click. Erik -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jonathan.Cubides at uib.no Fri Feb 1 15:32:36 2019 From: Jonathan.Cubides at uib.no (Jonathan Steven Prieto Cubides) Date: Fri, 1 Feb 2019 14:32:36 +0000 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru>, Message-ID: <50b4a99f19a34132aece943310b627fd@uib.no> Hi Erik, If you use the Atom editor and the add-on Agda Mode, that's what you want is possible. Just use indentation if you want to hide parts of the code. Atom allows you to fold or unfold all the code at some level of indentation. https://github.com/banacorn/agda-mode Jonathan ________________________________ From: Agda on behalf of Erik Palmgren Sent: Friday, February 1, 2019 11:47:13 AM To: Agda at lists.chalmers.se Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? Does any know if there is some way of temporarily hiding parts of proofs in Emacs Agda mode? Maybe some general feature of Emacs can do that? For instance, it would be useful to hide definiens/proofs when browsing Agda files. I seem to recall that there was such a feature in Alfa a GUI for Agda 1, which was very useful . In e.g. Mathematica there is also a convenient section system, where parts can be hidden or folded away with a click. Erik From guillaume.brunerie at gmail.com Fri Feb 1 15:43:36 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Fri, 1 Feb 2019 15:43:36 +0100 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: <50b4a99f19a34132aece943310b627fd@uib.no> References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> <50b4a99f19a34132aece943310b627fd@uib.no> Message-ID: Apparently there is also a minor mode for emacs which does folding based on indentation: https://github.com/zenozeng/yafolding.el. I haven?t tried it, so I don?t know if it actually works with Agda. There is also Folding mode (https://www.emacswiki.org/emacs/FoldingMode), but it requires quite ugly {{{ and }}} markers (although they might be customizable). Best, Guillaume Den fre 1 feb. 2019 kl 15:32 skrev Jonathan Steven Prieto Cubides : > > Hi Erik, > > > If you use the Atom editor and the add-on Agda Mode, that's > > what you want is possible. Just use indentation if you want to hide > > parts of the code. Atom allows you to fold or unfold all the code > > at some level of indentation. > > > https://github.com/banacorn/agda-mode > > > Jonathan > > ________________________________ > From: Agda on behalf of Erik Palmgren > Sent: Friday, February 1, 2019 11:47:13 AM > To: Agda at lists.chalmers.se > Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? > > > > Does any know if there is some way of temporarily hiding parts of proofs in > > Emacs Agda mode? Maybe some general feature of Emacs can do that? > > > For instance, it would be useful to hide definiens/proofs when browsing > > Agda files. > > > I seem to recall that there was such a feature in Alfa a GUI for Agda 1, which > > was very useful . In e.g. Mathematica there is also a convenient section system, > > where parts can be hidden or folded away with a click. > > > > Erik > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From m.escardo at cs.bham.ac.uk Fri Feb 1 16:20:50 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 1 Feb 2019 15:20:50 +0000 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> <50b4a99f19a34132aece943310b627fd@uib.no> Message-ID: <708ea033-dd60-acfd-9744-09b76045e87d@cs.bham.ac.uk> It would also be nice if the agda --html command-line option had a sub-option to "fold" definitions, with something to click to open them. Apparently you do this with and
in html. This could also already work for literate code using markdown, but I haven't tried it. Martin On 01/02/2019 14:43, guillaume.brunerie at gmail.com wrote: > Apparently there is also a minor mode for emacs which does folding > based on indentation: https://github.com/zenozeng/yafolding.el. > I haven?t tried it, so I don?t know if it actually works with Agda. > > There is also Folding mode > (https://www.emacswiki.org/emacs/FoldingMode), but it requires quite > ugly {{{ and }}} markers (although they might be customizable). > > Best, > Guillaume > > Den fre 1 feb. 2019 kl 15:32 skrev Jonathan Steven Prieto Cubides > : >> >> Hi Erik, >> >> >> If you use the Atom editor and the add-on Agda Mode, that's >> >> what you want is possible. Just use indentation if you want to hide >> >> parts of the code. Atom allows you to fold or unfold all the code >> >> at some level of indentation. >> >> >> https://github.com/banacorn/agda-mode >> >> >> Jonathan >> >> ________________________________ >> From: Agda on behalf of Erik Palmgren >> Sent: Friday, February 1, 2019 11:47:13 AM >> To: Agda at lists.chalmers.se >> Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? >> >> >> >> Does any know if there is some way of temporarily hiding parts of proofs in >> >> Emacs Agda mode? Maybe some general feature of Emacs can do that? >> >> >> For instance, it would be useful to hide definiens/proofs when browsing >> >> Agda files. >> >> >> I seem to recall that there was such a feature in Alfa a GUI for Agda 1, which >> >> was very useful . In e.g. Mathematica there is also a convenient section system, >> >> where parts can be hidden or folded away with a click. >> >> >> >> Erik >> >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From pedagand at gmail.com Fri Feb 1 17:01:18 2019 From: pedagand at gmail.com (Pierre-Evariste Dagand) Date: Fri, 1 Feb 2019 17:01:18 +0100 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> Message-ID: > Does any know if there is some way of temporarily hiding parts of proofs in > Emacs Agda mode? Maybe some general feature of Emacs can do that? You're looking for outline-minor-mode [https://www.emacswiki.org/emacs/OutlineMinorMode]. Attached is a (decade old) example using this (type 'y' when emacs asks about setting local variables). Here is some convenient navigation hooks (to put in your .emacs.el): (add-hook 'outline-minor-mode-hook (lambda () (define-key outline-minor-mode-map [(control tab)] 'org-cycle) (define-key outline-minor-mode-map [(backtab)] 'org-global-cycle) (define-key outline-minor-mode-map [M-up] 'outline-backward-same-level) (define-key outline-minor-mode-map [M-down] 'outline-forward-same-level) (define-key outline-minor-mode-map [M-left] 'outline-up-heading) (define-key outline-minor-mode-map [M-right] 'outline-next-visible-heading))) -- Pierre -------------- next part -------------- A non-text attachment was scrubbed... Name: STLC.agda Type: application/octet-stream Size: 13452 bytes Desc: not available URL: From mechvel at botik.ru Fri Feb 1 20:47:02 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 01 Feb 2019 22:47:02 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> Message-ID: <1549050422.2419.46.camel@one.mechvel.pereslavl.ru> On Fri, 2019-02-01 at 11:44 +0100, Ulf Norell wrote: > > > On Fri, Feb 1, 2019 at 10:50 AM Sergei Meshveliani > wrote: > > Can anybody, please, explain what is happening in the below > simple and > self-contained example? > > ----------------------------------------------------------------- > f : (m : ?) ? ? (\n ? n ? m) > > f 0 = (0 , ?-refl) > f (suc m) = let (n , n?m) = f m > in > case suc n ?? m of \ > { (yes _) ? (n , ?-step n?m) > ; (no _ ) ? (suc n , s?s n?m) } > > g = proj? ? f > ----------------------------------------------------------------- > > emacs, C-c C-l > g 22 > > is evaluated in 25 sec. > > > In this case the problem isn't proof evaluation, but the 'let' which > doesn't share evaluation of the right-hand side. This means that every > occurrence of `n` corresponds to a new call to `f`, making it > exponential. If you change `f` to > > > f 0 = (0 , ?-refl) > f (suc m) = > case f m of ? where > (n , n?m) ? > case suc n ?? m of \ > { (yes _) ? (n , ?-step n?m) > ; (no _ ) ? (suc n , s?s n?m) } > > > it runs fast (or as fast as the unary implementation of ?? allows). > ?! Thank you. So, to run the code in interpreter, it is highly desirable to replace let foo = foo1 in foo2 with case foo1 of \ { foo -> foo2 } everywhere in the application? And let (a , b) = f x (c , d) = g x a e = h c in f1 a c e to replace with case f x of \ { (a , b) -> case g x a of \ { (c , d) -> case h c of \ { e -> f1 a c e } } } ? > > Type checking produces Foo.agdai which has PEP, > MAlonzo takes Foo.agdai, compiles to Haskell with removing the > PEP, and Foo.hs does not have PEP > -- is this so? > > > Essentially yes, but the erasure actually happens when compiling the > type checked code to an intermediate language (called treeless), which > the GHC backend then turns into Haskell code. > > > Also it's a bit misleading to talk about proof evaluation, since there > is no clear distinction between proofs and terms in Agda. > Somehow unneeded code for the goal evaluation ... To use some library of provers, like say RingSolver, these prover functions need to be interpreted during type check. Right? Concerning this, is it a hard problem to enable the Agda interpreter to run a compiled code? Thank you for explanations, ------ Sergei From fdhzs2010 at hotmail.com Fri Feb 1 21:46:59 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Fri, 1 Feb 2019 20:46:59 +0000 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> , Message-ID: There are lots of similar tools. One alternative is packages that allows you to hide some marked regions, e.g. https://www.emacswiki.org/emacs/HideRegion but tools like this tend to pollute the source code by markers that do not contribute to the content of the code. Sincerely Yours, Jason Hu ________________________________ From: Agda on behalf of Pierre-Evariste Dagand Sent: February 1, 2019 11:01 AM To: Erik Palmgren Cc: Agda at lists.chalmers.se Subject: Re: [Agda] Hiding parts of proofs in Emacs Agda mode? > Does any know if there is some way of temporarily hiding parts of proofs in > Emacs Agda mode? Maybe some general feature of Emacs can do that? You're looking for outline-minor-mode [https://www.emacswiki.org/emacs/OutlineMinorMode]. Attached is a (decade old) example using this (type 'y' when emacs asks about setting local variables). Here is some convenient navigation hooks (to put in your .emacs.el): (add-hook 'outline-minor-mode-hook (lambda () (define-key outline-minor-mode-map [(control tab)] 'org-cycle) (define-key outline-minor-mode-map [(backtab)] 'org-global-cycle) (define-key outline-minor-mode-map [M-up] 'outline-backward-same-level) (define-key outline-minor-mode-map [M-down] 'outline-forward-same-level) (define-key outline-minor-mode-map [M-left] 'outline-up-heading) (define-key outline-minor-mode-map [M-right] 'outline-next-visible-heading))) -- Pierre -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Fri Feb 1 22:25:32 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 02 Feb 2019 00:25:32 +0300 Subject: [Agda] interactive Bin arith performance In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> Message-ID: <1549056332.2305.22.camel@one.mechvel.pereslavl.ru> On Thu, 2019-01-31 at 12:13 +0100, Ulf Norell wrote: > Without looking at the code my guess would be that you are strict in > the proof objects. At runtime (after compilation) the proof objects > are erased and not evaluated, but at compile time you evaluate the > generated proofs, causing the terrible performance. > This is about a certain divMod for a certain representation for Bin. The result data DivMod includes two proofs, and is evaluated recursively. And this probably gives a great overhead of proof objects in evaluation in the interpreter. Probably, I can reorganize divMod to divMod' to return only a pair (quotient , remainder), and then add an Agda proof for the two properties of the result: a = quotient * b + remainder, remainder < b. May be this will not be a good style, but this will remove evaluating proof objects in interpreting of divMod' a b b/=0. Right? Thanks, ------ Sergei From konn.jinro at gmail.com Sat Feb 2 11:44:44 2019 From: konn.jinro at gmail.com (Hiromi ISHII) Date: Sat, 2 Feb 2019 19:44:44 +0900 Subject: [Agda] How can I prove algebraic laws of HITs in Cubical Agda? Message-ID: <1CB8348B-BBA0-4D8B-835A-ED7DC81E9942@gmail.com> Hi there, I'm recently experimenting with Cubical Agda to implement some data-structures and algorithms within Cubical Type Theory. I have some problems to understand why my proof doesn't work in cubical settings. The detail is explained below. The complete code is available on [GitHub]. [GitHub]: https://github.com/konn/cubical-agda-playground/blob/master/Deq.agda My first experiment is to implement a (na?ve) deque expressed as a pair of lists, where the first half corresponds to the front half of the queue, and the latter part the reversed rear half. With HITs, one can express non-trivial equality between deques intuitively: ```agda data Deq {?} (A : Set ?) : Set ? where mkQ : List A ? List A ? Deq A rotate : (a : A) (l r : List A) ? mkQ (l L.?? a) r ? mkQ l (r L.?? a) ``` Then, I could easily cons, snoc and (na?ve) append operations on them. The next goal is to prove that this deque forms a monoid, where I get stuck. My first attempt is to prove the right identity law for deques: ``` ++-identity? : RightIdentity [] _++_ -- ? ? (xs : Deq A) ? xs ++ [] ? xs ++-identity = ? ``` For the 0-dimensional case, the proof is straightforward (modulo basic properties of lists): ``` ++-identity?-base : ?(l r : List A) ? mkQ l r ++ [] ? mkQ l r ++-identity?-base l r = (mkQ (l L.++ L.reverse r) L.[]) ?? aux-que-app-rev l (L.reverse r) L.[] ? (mkQ l (L.reverse (L.reverse r))) ?? cong (mkQ l) (L.reverse-involutive r) ? mkQ l r ? ``` ...and two-dimensional case: ``` ++-identity?-i : ?(a : A) (l r : List A) (j? : I) ? rotate a l r j? ++ [] ? rotate a l r j? ++-identity?-i a l r j? i = hfill (? j ? ? { (i = i0) ? rotate a l r j ++ [] ; (i = i1) ? rotate a l r j }) (inc (++-identity?-base (l L.?? a) r i)) j? ``` So far, so good. But I got stuck when I tried to combine them to get the entire proof for the right identity for deques. I wrote the following (failed) proof: ``` ++-identity? : RightIdentity [] _++_ ++-identity? (mkQ l r) = ++-identity?-base l r ++-identity? (rotate a l r j?) i = ++-identity?-i a l r j? i ``` Then, Cubical Agda halts with the following error: ``` Checking Deq (/Users/hiromi/Documents/Programming/agda/cubical/Deq.agda). l L.++ L.reverse (r L.?? a) != hcomp (? { j (i = i0) ? (l L.?? a) L.++ L.reverse r ; j (i = i1) ? (l L.++ (a L.? L.[]) L.++ L.reverse r ?? (? i? ? l L.++ L.reverse-++-commute r (a L.? L.[]) (~ i?)) ? (? _ ? l L.++ L.reverse (r L.?? a))) j }) (L.++-assoc l (a L.? L.[]) (L.reverse r) i) of type List A when checking the definition of ++-identity? ``` Why such error occurs? What is the proper way to prove such identities within Cubical Type Theory? I would appreciate if anyone kindly teach me. Thank you in advance, -- Hiromi ISHII konn.jinro at gmail.com Doctoral program in Mathematics, University of Tsukuba From caryoscelus at gmx.com Sat Feb 2 12:37:09 2019 From: caryoscelus at gmx.com (Caryo Scelus) Date: Sat, 2 Feb 2019 11:37:09 +0000 Subject: [Agda] How can I prove algebraic laws of HITs in Cubical Agda? In-Reply-To: <1CB8348B-BBA0-4D8B-835A-ED7DC81E9942@gmail.com> References: <1CB8348B-BBA0-4D8B-835A-ED7DC81E9942@gmail.com> Message-ID: <20190202113709.2e2ef5bd@debian> On Sat, 2 Feb 2019 19:44:44 +0900 Hiromi ISHII wrote: > Hi there, > > I'm recently experimenting with Cubical Agda to implement some > data-structures and algorithms within Cubical Type Theory. > I have some problems to understand why my proof doesn't work > in cubical settings. > The detail is explained below. > The complete code is available on [GitHub]. > > Why such error occurs? What is the proper way to prove such identities > within Cubical Type Theory? > I would appreciate if anyone kindly teach me. Hello, While i wasn't able to fix the proof on the spot, i believe the reason for the error is the same as in the following simplified example: data [0-1] : Set where ? ? : [0-1] int : ? ? ? 0?x : (P : [0-1] ? Set) (p : P ?) ? ? x ? P x -- 0?x P p ? = p -- doesn't work: p != transp (? i ? P (int (i0 ? i))) i0 p of -- type P (int i0) 0?x P p ? = subst P refl p -- this works 0?x P p ? = subst P int p 0?x P p (int i) = subst P (? j ? int (i ? j)) p It appears that agda requires definitional equality of right-side expressions corresponding to overlapping (due to paths) left-side patterns; to check that, it substitutes interval variables with i0 and i1 (reducing `rotate a l r j?` to `mkQ (l L.?? a) r` and `mkQ l (r L.?? a)`). Since equalities for cubical operations (subst/transp in mine case, probably applies to hcomp as well) do not hold definitionally, agda complains. So i would guess that in order for proof to work, you need to rewrite your base case to match (reduced) path case. Hope that would help From konn.jinro at gmail.com Sat Feb 2 13:42:48 2019 From: konn.jinro at gmail.com (Hiromi ISHII) Date: Sat, 2 Feb 2019 21:42:48 +0900 Subject: [Agda] How can I prove algebraic laws of HITs in Cubical Agda? In-Reply-To: <20190202113709.2e2ef5bd@debian> References: <1CB8348B-BBA0-4D8B-835A-ED7DC81E9942@gmail.com> <20190202113709.2e2ef5bd@debian> Message-ID: <94A6D773-FDDA-4BF5-8AF3-5E9CC2957AD7@gmail.com> Hello Caryo, > 2019/02/02 20:37?Caryo Scelus ????: > > On Sat, 2 Feb 2019 19:44:44 +0900 > Hiromi ISHII wrote: > >> Hi there, >> >> I'm recently experimenting with Cubical Agda to implement some >> data-structures and algorithms within Cubical Type Theory. >> I have some problems to understand why my proof doesn't work >> in cubical settings. >> The detail is explained below. >> The complete code is available on [GitHub]. >> >> Why such error occurs? What is the proper way to prove such identities >> within Cubical Type Theory? >> I would appreciate if anyone kindly teach me. > > Hello, > > While i wasn't able to fix the proof on the spot, i believe the reason > for the error is the same as in the following simplified example: > > data [0-1] : Set where > ? ? : [0-1] > int : ? ? ? > > 0?x : (P : [0-1] ? Set) (p : P ?) ? ? x ? P x > -- 0?x P p ? = p > -- doesn't work: p != transp (? i ? P (int (i0 ? i))) i0 p of > -- type P (int i0) > 0?x P p ? = subst P refl p -- this works > 0?x P p ? = subst P int p > 0?x P p (int i) = subst P (? j ? int (i ? j)) p > > It appears that agda requires definitional equality of right-side > expressions corresponding to overlapping (due to paths) left-side > patterns; to check that, it substitutes interval variables with i0 and > i1 (reducing `rotate a l r j?` to `mkQ (l L.?? a) r` and `mkQ l (r L.?? > a)`). Since equalities for cubical operations (subst/transp in mine > case, probably applies to hcomp as well) do not hold definitionally, > agda complains. So i would guess that in order for proof to work, you > need to rewrite your base case to match (reduced) path case. Hope that > would help Thank you for your rapid reply and explanation! While I haven't figured out the precise correction to be made, but your suggestion helped me understanding the cause of error. Thanks! -- Hiromi ISHII konn.jinro at gmail.com Doctoral program in Mathematics, University of Tsukuba From palmgren at math.su.se Sat Feb 2 14:10:46 2019 From: palmgren at math.su.se (Erik Palmgren) Date: Sat, 2 Feb 2019 14:10:46 +0100 Subject: [Agda] Hiding parts of proofs in Emacs Agda mode? In-Reply-To: References: <1548852941.2346.41.camel@one.mechvel.pereslavl.ru> <1548868442.2358.12.camel@one.mechvel.pereslavl.ru> <1548885509.2382.11.camel@one.mechvel.pereslavl.ru> <1548933113.2404.85.camel@one.mechvel.pereslavl.ru> <1548949203.3842.77.camel@one.mechvel.pereslavl.ru> <1548953601.2378.26.camel@one.mechvel.pereslavl.ru> <1549014601.2377.54.camel@one.mechvel.pereslavl.ru> Message-ID: Many thanks for this solution and the nice Agda example. I will try this out, and in particular how navigation works in Aquamacs. Thanks also for the other responses. Good to know about an alternative Agda editor. Erik Den 2019-02-01 kl. 17:01, skrev Pierre-Evariste Dagand: >> Does any know if there is some way of temporarily hiding parts of proofs in >> Emacs Agda mode? Maybe some general feature of Emacs can do that? > > You're looking for outline-minor-mode > [https://www.emacswiki.org/emacs/OutlineMinorMode]. Attached is a > (decade old) example using this (type 'y' when emacs asks about > setting local variables). > > Here is some convenient navigation hooks (to put in your .emacs.el): > > (add-hook 'outline-minor-mode-hook > ? (lambda () > ??? (define-key outline-minor-mode-map [(control tab)] 'org-cycle) > ??? (define-key outline-minor-mode-map [(backtab)] 'org-global-cycle) > ??? (define-key outline-minor-mode-map [M-up] 'outline-backward-same-level) > ??? (define-key outline-minor-mode-map [M-down] > 'outline-forward-same-level) > ??? (define-key outline-minor-mode-map [M-left] 'outline-up-heading) > ??? (define-key outline-minor-mode-map [M-right] > 'outline-next-visible-heading))) > > -- > Pierre From pierre.hyvernat at univ-smb.fr Mon Feb 4 13:42:25 2019 From: pierre.hyvernat at univ-smb.fr (Pierre Hyvernat) Date: Mon, 4 Feb 2019 13:42:25 +0100 Subject: [Agda] Question about coinductive types Message-ID: <20190204124225.2bj7tvupl3tgcres@d53.lama.univ-savoie.fr> Hello... My question is more about the semantics of MLTT than just about Agda, but since that's where it originated, I guess this list is a good place to ask... I've been writing some Agda code involving coinductive types and was wondering about the following: are functions definable in type theory* congruence wrt bisimilarity? *: say, MLTT with weakly terminal coalgebras for indexed containers Am I right in expecting that to be true if we only consider functions between datatypes, ie exclude inductive families like intensional equality, which does not respect bisimilarity. (Equality is still needed to define bisimilarity though...) Any pointer, suggestions? The reason I ask is that writing out explicit bisimilarity proofs for general indexed containers in Agda is **very** painful. The more I can keep in some "meta" theory, the better... Pierre -- For every complex problem, there is a solution that is simple, neat, and wrong. -- H. L. Mencken From kaposi.ambrus at gmail.com Mon Feb 4 14:22:42 2019 From: kaposi.ambrus at gmail.com (Ambrus Kaposi) Date: Mon, 4 Feb 2019 14:22:42 +0100 Subject: [Agda] Call for talks (with travel funding): EUTypes WG meeting in Krakow, 23-24 February 2019 In-Reply-To: References: Message-ID: ---------- Forwarded message --------- From: Keiko Nakata Date: Sun, 3 Feb 2019 at 09:17 Subject: Call for talks (with travel funding): EUTypes WG meeting in Krakow, 23-24 February 2019 To: Hello. [We still have some fundings for speakers from Europe.] The EU COST Action EUTypes project will organise EUTypes WG meeting in Krakow, 23-24 February 2019 Web page: https://eutypes.cs.ru.nl/Meetings/Krakow19 in relation to Lambda Days 2019 (http://www.lambdadays.org/lambdadays2019/). Confirmed invited speakers: Fran?ois Dupressoir, University of Surrey, UK Paolo Giarrusso, EPFL, Switzerland Robbert Krebbers, Delft University of Technology, Netherlands Kenji Maillard, INRIA, France Pierre-Yves Strub, ?cole Polytechnique, France We still have some fundings available for speakers from Europe: 3-night accommodation (fixed rate, 80 EUR * 3 nights) 6 meals (fixed rate, 20 EUR * 6 meals) transport expenses (based on actual costs) If you would like to apply for the funding, please send me the title and abstract of your talk as well as the URL of your homepage. Best regards, Keiko -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Mon Feb 4 15:34:46 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 4 Feb 2019 15:34:46 +0100 Subject: [Agda] Question about coinductive types In-Reply-To: <20190204124225.2bj7tvupl3tgcres@d53.lama.univ-savoie.fr> References: <20190204124225.2bj7tvupl3tgcres@d53.lama.univ-savoie.fr> Message-ID: On 04/02/2019 13.42, Pierre Hyvernat wrote: > The reason I ask is that writing out explicit bisimilarity proofs for > general indexed containers in Agda is **very** painful. I think that in Cubical Agda bisimilarity is equal to propositional equality. Perhaps you could consider using that variant of Agda instead. -- /NAD From andersmortberg at gmail.com Mon Feb 4 16:58:58 2019 From: andersmortberg at gmail.com (Anders Mortberg) Date: Mon, 4 Feb 2019 10:58:58 -0500 Subject: [Agda] Question about coinductive types In-Reply-To: References: <20190204124225.2bj7tvupl3tgcres@d53.lama.univ-savoie.fr> Message-ID: Indeed, there is a proof that bisimilarity is (path-)equal to (path-)equality in our cubical library: https://github.com/agda/cubical/blob/master/Cubical/Codata/Stream/Properties.agda#L82 However Cubical Agda does not yet properly support all the features of Agda, in particular inductive families are not yet supported. So depending on what you want to do it might or might not currently suit your needs. -- Anders On Mon, Feb 4, 2019 at 9:34 AM Nils Anders Danielsson wrote: > > On 04/02/2019 13.42, Pierre Hyvernat wrote: > > The reason I ask is that writing out explicit bisimilarity proofs for > > general indexed containers in Agda is **very** painful. > > I think that in Cubical Agda bisimilarity is equal to propositional > equality. Perhaps you could consider using that variant of Agda instead. > > -- > /NAD > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From P.Achten at cs.ru.nl Tue Feb 5 11:05:43 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Tue, 5 Feb 2019 11:05:43 +0100 Subject: [Agda] [TFP'19] first call for papers: Trends in Functional Programming 2019, 12-14 June 2019, Vancouver, BC, CA Message-ID: <4452f716-213c-1a98-de7f-b15491e007ed@cs.ru.nl> ???????????????? ------------------------------- ?????????????????? C A L L? F O R? P A P E R S ???????????????? ------------------------------- ????????????????????? ====== TFP 2019 ====== ????????? 20th Symposium on Trends in Functional Programming ?????????????????????????? 12-14 June, 2019 ????????????????????????? Vancouver, BC, CA ????????????????? https://www.tfp2019.org/index.html == Important Dates == Submission Deadline??????????? Thursday, March 28, 2019 Paper Notification???????????? Thursday, May 2, 2019 TFPIE????????????????????????? Tuesday, June 11, 2019 Symposium????????????????????? Wednesday, June 12, 2019 ? Friday, June 14, 2019 Student Paper Feedback???????? Friday June 21, 2019 Submission for Formal Review?? Thursday, August 1, 2019 Notification of Acceptance???? Thursday, October 24, 2019 Camera Ready?????????????????? Friday, November 29, 2019 The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions (see below at scope). Please be aware that TFP uses two distinct rounds of submissions (see below at submission details). TFP 2019 will be the main event of a pair of functional programming events. TFP 2019 will be accompanied by the International Workshop on Trends in Functional Programming in Education (TFPIE), which will take place on June 11. == Scope == The symposium recognizes that new trends may arise through various routes. As part of the Symposium's focus on trends we therefore identify the following five article categories. High-quality articles are solicited in any of these categories: ??? Research Articles: ??????? Leading-edge, previously unpublished research work ??? Position Articles: ??????? On what new trends should or should not be ??? Project Articles: ??????? Descriptions of recently started new projects ??? Evaluation Articles: ??????? What lessons can be drawn from a finished project ??? Overview Articles: ??????? Summarizing work with respect to a trendy subject Articles must be original and not simultaneously submitted for publication to any other forum. They may consider any aspect of functional programming: theoretical, implementation-oriented, or experience-oriented. Applications of functional programming techniques to other languages are also within the scope of the symposium. Topics suitable for the symposium include, but are not limited to: ??? Functional programming and multicore/manycore computing ??? Functional programming in the cloud ??? High performance functional computing ??? Extra-functional (behavioural) properties of functional programs ??? Dependently typed functional programming ??? Validation and verification of functional programs ??? Debugging and profiling for functional languages ??? Functional programming in different application areas: ??? security, mobility, telecommunications applications, embedded ??? systems, global computing, grids, etc. ??? Interoperability with imperative programming languages ??? Novel memory management techniques ??? Program analysis and transformation techniques ??? Empirical performance studies ??? Abstract/virtual machines and compilers for functional languages ??? (Embedded) domain specific languages ??? New implementation strategies ??? Any new emerging trend in the functional programming area If you are in doubt on whether your article is within the scope of TFP, please contact the TFP 2019 program chairs, William J. Bowman and Ron Garcia. == Best Paper Awards == To reward excellent contributions, TFP awards a prize for the best paper accepted for the formal proceedings. TFP traditionally pays special attention to research students, acknowledging that students are almost by definition part of new subject trends. A student paper is one for which the authors state that the paper is mainly the work of students, the students are listed as first authors, and a student would present the paper. A prize for the best student paper is awarded each year. In both cases, it is the PC of TFP that awards the prize. In case the best paper happens to be a student paper, that paper will then receive both prizes. == Instructions to Author == Papers must be submitted at: ??? https://easychair.org/conferences/?conf=tfp2019 Authors of papers have the choice of having their contributions formally reviewed either before or after the Symposium. == Pre-symposium formal review == Papers to be formally reviewed before the symposium should be submitted before an early deadline and receive their reviews and notification of acceptance for both presentation and publication before the symposium. A paper that has been rejected in this process may still be accepted for presentation at the symposium, but will not be considered for the post-symposium formal review. == Post-symposium formal review == Draft papers will receive minimal reviews and notification of acceptance for presentation at the symposium. Authors of draft papers will be invited to submit revised papers based on the feedback receive at the symposium. A post-symposium refereeing process will then select a subset of these articles for formal publication. == Paper categories == Draft papers and papers submitted for formal review are submitted as extended abstracts (4 to 10 pages in length) or full papers (20 pages). The submission must clearly indicate which category it belongs to: research, position, project, evaluation, or overview paper. It should also indicate which authors are research students, and whether the main author(s) are students. A draft paper for which all authors are students will receive additional feedback by one of the PC members shortly after the symposium has taken place. == Format == Papers must be written in English, and written using the LNCS style. For more information about formatting please consult the Springer LNCS web site. == Program Committee == Program Co-chairs William J. Bowman????????? University of British Columbia Ronald Garcia????????????? University of British Columbia Matteo Cimini????????????? University of Massachusetts Lowell Ryan Culpepper???????????? Czech Technical Institute Joshua Dunfield??????????? Queen's University Sam Lindley??????????????? University of Edinburgh Assia Mahboubi???????????? INRI Nantes Christine Rizkallah??????? University of New South Wales Satnam Singh Marco T. Moraz?n?????????? Seton Hall University John Hughes??????????????? Chalmers University and Quviq Nicolas Wu???????????????? University of Bristol Tom Schrijvers???????????? KU Leuven Scott Smith??????????????? Johns Hopkins University Stephanie Balzer?????????? Carnegie Mellon University Vikt?ria Zs?k????????????? E?tv?s Lor?nd University From pierre.hyvernat at univ-smb.fr Wed Feb 6 10:25:54 2019 From: pierre.hyvernat at univ-smb.fr (Pierre Hyvernat) Date: Wed, 6 Feb 2019 10:25:54 +0100 Subject: [Agda] Question about coinductive types In-Reply-To: References: <20190204124225.2bj7tvupl3tgcres@d53.lama.univ-savoie.fr> Message-ID: <20190206092554.e3jm3l33adole7zg@d53.lama.univ-savoie.fr> >Indeed, there is a proof that bisimilarity is (path-)equal to >(path-)equality in our cubical library: > That's great! Do you know if the case of streams generalizes to arbitrary "M-types", or even better, greatest fixed points of indexed containers, at least theoretically? Or put in other words, is cubical type theory compatible with the property "bisimulation is equal to path-equality" for such general notion of coinductive types? >However Cubical Agda does not yet properly support all the features of >Agda, in particular inductive families are not yet supported. So >depending on what you want to do it might or might not currently suit >your needs. > At the moment, my code doesn't use any "modern" (read univalence and cubes) features and I prefer to keep it that way. Some things might become possible, but probably not easy, nor interesting. (Using cubes, and equality over equalities has been on my TODO list for some time though...) Pierre -- When a distinguished but elderly scientist states that something is possible, he is almost certainly right. When he states that something is impossible, he is very probably wrong. -- Arthur C. Clarke From carette at mcmaster.ca Wed Feb 6 22:30:25 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Wed, 6 Feb 2019 16:30:25 -0500 Subject: [Agda] Abstract existential ? Message-ID: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> Is there a way to encode an existential in Agda where the "exists" part of the dependent pair is abstract/private?? ? from the standard library just says that the first part is implicit (i.e. can be uniquely inferred). I think I could use the same trick as in Haskell (i.e. use a wrapper where I don't export the constructor but do provide accessor functions that don't leak), but that somehow seems heavy.? Is there something simpler? I don't mean a fully non-constructive exists here: I mean (informally!) "a dependent pair where the first projection is abstract and cannot leak". So to build such a thing, a definite type must be used, but once it is created, the 'clients' as it were, cannot find out what that type is. Jacques From m.escardo at cs.bham.ac.uk Wed Feb 6 22:54:20 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Wed, 6 Feb 2019 21:54:20 +0000 Subject: [Agda] Abstract existential ? In-Reply-To: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> Message-ID: <45be3320-3c21-db68-95d2-3ee41904c2fe@cs.bham.ac.uk> In HoTT/UF, and in cubical Agda, you can achieve this by considering the propositional truncation of a Sigma type ||Sigma(x:X), A x||. This is constructive in the way you wish. Not always can you have ||Sigma(x:X), A x|| -> Sigma(x:X) -> A x, as you would be able to deduce excluded middle if you could do this for all X:Set and A:X->Set. However, sometimes you can, e.g. for f:N->N, ||Sigma(n:N), f n = 0|| -> Sigma(n:N), f n = 0. (If such a function has a root, you can find one.) I emphasize that this is not Markov's principle ??(Sigma(n:N), f n = 0) -> Sigma(n:N), f n = 0, which is *not* provable. (And so ||-|| is not the same thing as ??(-).) This is discussed in detail in the paper "Notions of anonymous existence in Martin-Loef Type Theory" https://arxiv.org/abs/1610.03346 by Kraus, Escardo, Coquand, Altenkirch. In terms of setoids, you can think of the propositional truncation of a setoid B to be the setoid with the same underlying type, but with the given equivalence relation replaced by the the chaotic, or indiscrete, equivalence relation that relates any two points. Martin On 06/02/2019 21:30, carette at mcmaster.ca wrote: > Is there a way to encode an existential in Agda where the "exists" part > of the dependent pair is abstract/private?? ? from the standard library > just says that the first part is implicit (i.e. can be uniquely inferred). > > I think I could use the same trick as in Haskell (i.e. use a wrapper > where I don't export the constructor but do provide accessor functions > that don't leak), but that somehow seems heavy.? Is there something > simpler? > > I don't mean a fully non-constructive exists here: I mean (informally!) > "a dependent pair where the first projection is abstract and cannot > leak". So to build such a thing, a definite type must be used, but once > it is created, the 'clients' as it were, cannot find out what that type is. > > Jacques > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From carette at mcmaster.ca Wed Feb 6 23:06:14 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Wed, 6 Feb 2019 17:06:14 -0500 Subject: [Agda] Abstract existential ? In-Reply-To: <45be3320-3c21-db68-95d2-3ee41904c2fe@cs.bham.ac.uk> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <45be3320-3c21-db68-95d2-3ee41904c2fe@cs.bham.ac.uk> Message-ID: <644f7549-e793-ea0d-3ef5-127a3e50a82c@mcmaster.ca> Thanks - I was aware that in HoTT/UF, this was just propositional truncation. And that in cubical Agda, this should just 'work'. But I am trying to get as far as possible with 'vanilla' Agda (without any axioms, for funext is out too).? Thanks for reminding me of this paper, I did mean to reread it, now that I understand a lot of these issues much better than when I first attempted to read it. I am quite willing to go through the torture of working with Setoids if that's what it takes. Has someone worked that out -- i.e. is there are library that gives the main infrastructure needed to do propositional truncation on Setoids? Jacques On 2019-02-06 4:54 p.m., Martin Escardo wrote: > In HoTT/UF, and in cubical Agda, you can achieve this by considering > the propositional truncation of a Sigma type > > ? ||Sigma(x:X), A x||. > > This is constructive in the way you wish. Not always can you have > > ? ||Sigma(x:X), A x|| -> Sigma(x:X) -> A x, > > as you would be able to deduce excluded middle if you could do this > for all X:Set and A:X->Set. > > However, sometimes you can, e.g. for f:N->N, > > ? ||Sigma(n:N), f n = 0|| -> Sigma(n:N), f n = 0. > > (If such a function has a root, you can find one.) > > I emphasize that this is not Markov's principle > > ? ??(Sigma(n:N), f n = 0) -> Sigma(n:N), f n = 0, > > which is *not* provable. (And so ||-|| is not the same thing as ??(-).) > > This is discussed in detail in the paper > "Notions of anonymous existence in Martin-Loef Type Theory" > https://arxiv.org/abs/1610.03346 > by Kraus, Escardo, Coquand, Altenkirch. > > In terms of setoids, you can think of the propositional truncation of > a setoid B to be the setoid with the same underlying type, but with > the given equivalence relation replaced by the the chaotic, or > indiscrete, equivalence relation that relates any two points. > > Martin > > > On 06/02/2019 21:30, carette at mcmaster.ca wrote: >> Is there a way to encode an existential in Agda where the "exists" >> part of the dependent pair is abstract/private?? ? from the standard >> library just says that the first part is implicit (i.e. can be >> uniquely inferred). >> >> I think I could use the same trick as in Haskell (i.e. use a wrapper >> where I don't export the constructor but do provide accessor >> functions that don't leak), but that somehow seems heavy.? Is there >> something simpler? >> >> I don't mean a fully non-constructive exists here: I mean >> (informally!) "a dependent pair where the first projection is >> abstract and cannot leak". So to build such a thing, a definite type >> must be used, but once it is created, the 'clients' as it were, >> cannot find out what that type is. >> >> Jacques >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > From m.escardo at cs.bham.ac.uk Wed Feb 6 23:15:49 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Wed, 6 Feb 2019 22:15:49 +0000 Subject: [Agda] Abstract existential ? In-Reply-To: <644f7549-e793-ea0d-3ef5-127a3e50a82c@mcmaster.ca> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <45be3320-3c21-db68-95d2-3ee41904c2fe@cs.bham.ac.uk> <644f7549-e793-ea0d-3ef5-127a3e50a82c@mcmaster.ca> Message-ID: On 06/02/2019 22:06, carette at mcmaster.ca wrote: > I am quite willing to go through the torture of working with Setoids if > that's what it takes. Has someone worked that out -- i.e. is there are > library that gives the main infrastructure needed to do propositional > truncation on Setoids? I don't know. But the cubical model can be thought of as a generalization of the setoid model (with a more intense level torture?), and cubical type theory / Agda can be thought of as such as library for the cubical model, where everything automatically preserves the generalized equivalence relations (that is, the cubical structure). Regarding setoids themselves, the problem is that things become unclear when one considers universes (the types Set i in Agda), in particular when you consider things such as the type of all groups in a given universe. The cubical model / type theory is much better suited for that. (And more generally HoTT/UF, which is what cubical type theory was designed to give computational content to.) > > Jacques > > On 2019-02-06 4:54 p.m., Martin Escardo wrote: >> In HoTT/UF, and in cubical Agda, you can achieve this by considering >> the propositional truncation of a Sigma type >> >> ? ||Sigma(x:X), A x||. >> >> This is constructive in the way you wish. Not always can you have >> >> ? ||Sigma(x:X), A x|| -> Sigma(x:X) -> A x, >> >> as you would be able to deduce excluded middle if you could do this >> for all X:Set and A:X->Set. >> >> However, sometimes you can, e.g. for f:N->N, >> >> ? ||Sigma(n:N), f n = 0|| -> Sigma(n:N), f n = 0. >> >> (If such a function has a root, you can find one.) >> >> I emphasize that this is not Markov's principle >> >> ? ??(Sigma(n:N), f n = 0) -> Sigma(n:N), f n = 0, >> >> which is *not* provable. (And so ||-|| is not the same thing as ??(-).) >> >> This is discussed in detail in the paper >> "Notions of anonymous existence in Martin-Loef Type Theory" >> https://arxiv.org/abs/1610.03346 >> by Kraus, Escardo, Coquand, Altenkirch. >> >> In terms of setoids, you can think of the propositional truncation of >> a setoid B to be the setoid with the same underlying type, but with >> the given equivalence relation replaced by the the chaotic, or >> indiscrete, equivalence relation that relates any two points. >> >> Martin >> >> >> On 06/02/2019 21:30, carette at mcmaster.ca wrote: >>> Is there a way to encode an existential in Agda where the "exists" >>> part of the dependent pair is abstract/private?? ? from the standard >>> library just says that the first part is implicit (i.e. can be >>> uniquely inferred). >>> >>> I think I could use the same trick as in Haskell (i.e. use a wrapper >>> where I don't export the constructor but do provide accessor >>> functions that don't leak), but that somehow seems heavy.? Is there >>> something simpler? >>> >>> I don't mean a fully non-constructive exists here: I mean >>> (informally!) "a dependent pair where the first projection is >>> abstract and cannot leak". So to build such a thing, a definite type >>> must be used, but once it is created, the 'clients' as it were, >>> cannot find out what that type is. >>> >>> Jacques >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From andrew.pitts at cl.cam.ac.uk Thu Feb 7 09:45:48 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Thu, 7 Feb 2019 08:45:48 +0000 Subject: [Agda] Abstract existential ? In-Reply-To: <644f7549-e793-ea0d-3ef5-127a3e50a82c@mcmaster.ca> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <45be3320-3c21-db68-95d2-3ee41904c2fe@cs.bham.ac.uk> <644f7549-e793-ea0d-3ef5-127a3e50a82c@mcmaster.ca> Message-ID: <208DC8C3-C2EA-4192-A028-4F4933F1A62B@cl.cam.ac.uk> > On 6 Feb 2019, at 22:06, Jacques Carette wrote: > > Thanks - I was aware that in HoTT/UF, this was just propositional truncation. And that in cubical Agda, this should just 'work'. But I am trying to get as far as possible with 'vanilla' Agda (without any axioms, for funext is out too). I guess you were hoping for some way of coding ?mere? existentials in vanilla Agda using its ?abstract" or ?private? features. However the semantics of those features is not well understood ? there have been examples in the past where apparently private information can leak in unexpected ways leading to logical inconsistency (for example the disjointness property of constructors is hard to hide ? see the last comment at >). My own preference would be to restrict to a core of Agda that is vanilla Martin-L?f Type Theory and then postulate an axiom that is known to be consistent with it. Postulating quotients (of the kind provided by default in Lean 3) works nicely and allows one to side-step setoid hell (and as you probably know, implies function extensionality as well). However this approach may not fit what you have in mind to do with Agda. Andy -------------- next part -------------- An HTML attachment was scrubbed... URL: From andreas.nuyts at cs.kuleuven.be Thu Feb 7 11:28:52 2019 From: andreas.nuyts at cs.kuleuven.be (Andreas Nuyts) Date: Thu, 7 Feb 2019 11:28:52 +0100 Subject: [Agda] Abstract existential ? In-Reply-To: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> Message-ID: <3ef4c30a-7561-d969-9201-e7e73e38d3ad@cs.kuleuven.be> Dear Jacques, You seem to suggest that the first component of your dependent pairs is going to be a type. Thus, it seems to me that what you are looking for is a parametric existential quantifier, as exists in System F, F?, Haskell, ... Parametric quantification is certainly not available in vanilla MLTT/Agda, but is implemented in an experimental branch of agda, called agda-parametric: * github branch: https://github.com/agda/agda/tree/parametric * example code: https://github.com/Saizan/parametric-demo * corresponding paper: "Parametric Quantifiers for Dependent Type Theory", ICFP 2017, https://doi.org/10.1145/3110276 I emphasize that - as far as I understand - the Agda implementation (by Andrea Vezzosi) is purely for research and there are currently no plans for continued support or integration in the master branch. If you want to use vanilla MLTT/Agda, then the following theorem may come in handy: Any function in MLTT with small codomain, is parametric. (Some papers claim that ANY function in MLTT is parametric; this is true for a weaker definition of parametricity that is called continuity in our ICFP paper cited above, and that seems insufficient for your purposes.) What this boils down to is that any function of type (p : ?[ X \in Set ] P X) -> ... -> T, where T : Set 0, will satisfy the property you are looking for: its output does not depend on the first component of p. This is proven metatheoretically in: Atkey, Ghani, Johann, 2014, "A Relationally Parametric Model of Dependent Type Theory." Krishnaswami & Dreyer, 2013, "Internalizing Relational Parametricity in the Extensional Calculusof Constructions", Takeuti, 2001, "The Theory of Parametricity in Lambda Cube." The theorem breaks down if you add axioms such as (non-exhaustively): * choice / law of excluded middle: (X : Set) -> X + (X -> False) * resizing axioms Best regards, Andreas On 6/02/19 22:30, Jacques Carette wrote: > Is there a way to encode an existential in Agda where the "exists" > part of the dependent pair is abstract/private?? ? from the standard > library just says that the first part is implicit (i.e. can be > uniquely inferred). > > I think I could use the same trick as in Haskell (i.e. use a wrapper > where I don't export the constructor but do provide accessor functions > that don't leak), but that somehow seems heavy.? Is there something > simpler? > > I don't mean a fully non-constructive exists here: I mean > (informally!) "a dependent pair where the first projection is abstract > and cannot leak". So to build such a thing, a definite type must be > used, but once it is created, the 'clients' as it were, cannot find > out what that type is. > > Jacques > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andreas.nuyts at cs.kuleuven.be Thu Feb 7 11:33:02 2019 From: andreas.nuyts at cs.kuleuven.be (Andreas Nuyts) Date: Thu, 7 Feb 2019 11:33:02 +0100 Subject: [Agda] Abstract existential ? In-Reply-To: <3ef4c30a-7561-d969-9201-e7e73e38d3ad@cs.kuleuven.be> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <3ef4c30a-7561-d969-9201-e7e73e38d3ad@cs.kuleuven.be> Message-ID: <91b6391a-dda1-e859-dd9e-f3aa3ffb98cb@cs.kuleuven.be> Correction: I think Krishnaswami & Dreyer only prove some corrolaries of the given theorem. On 7/02/19 11:28, Andreas Nuyts wrote: > Dear Jacques, > > You seem to suggest that the first component of your dependent pairs > is going to be a type. Thus, it seems to me that what you are looking > for is a parametric existential quantifier, as exists in System F, F?, > Haskell, ... > > Parametric quantification is certainly not available in vanilla > MLTT/Agda, but is implemented in an experimental branch of agda, > called agda-parametric: > * github branch: https://github.com/agda/agda/tree/parametric > * example code: https://github.com/Saizan/parametric-demo > * corresponding paper: "Parametric Quantifiers for Dependent Type > Theory", ICFP 2017, https://doi.org/10.1145/3110276 > I emphasize that - as far as I understand - the Agda implementation > (by Andrea Vezzosi) is purely for research and there are currently no > plans for continued support or integration in the master branch. > > If you want to use vanilla MLTT/Agda, then the following theorem may > come in handy: > > Any function in MLTT with small codomain, is parametric. > > > (Some papers claim that ANY function in MLTT is parametric; this is > true for a weaker definition of parametricity that is called > continuity in our ICFP paper cited above, and that seems insufficient > for your purposes.) > > What this boils down to is that any function of type > (p : ?[ X \in Set ] P X) -> ... -> T, > where T : Set 0, will satisfy the property you are looking for: its > output does not depend on the first component of p. > > This is proven metatheoretically in: > Atkey, Ghani, Johann, 2014, "A Relationally Parametric Model of > Dependent Type Theory." > Krishnaswami & Dreyer, 2013, "Internalizing Relational Parametricity > in the Extensional Calculusof Constructions", > Takeuti, 2001, "The Theory of Parametricity in Lambda Cube." > > The theorem breaks down if you add axioms such as (non-exhaustively): > * choice / law of excluded middle: (X : Set) -> X + (X -> False) > * resizing axioms > > Best regards, > Andreas > > On 6/02/19 22:30, Jacques Carette wrote: >> Is there a way to encode an existential in Agda where the "exists" >> part of the dependent pair is abstract/private?? ? from the standard >> library just says that the first part is implicit (i.e. can be >> uniquely inferred). >> >> I think I could use the same trick as in Haskell (i.e. use a wrapper >> where I don't export the constructor but do provide accessor >> functions that don't leak), but that somehow seems heavy.? Is there >> something simpler? >> >> I don't mean a fully non-constructive exists here: I mean >> (informally!) "a dependent pair where the first projection is >> abstract and cannot leak". So to build such a thing, a definite type >> must be used, but once it is created, the 'clients' as it were, >> cannot find out what that type is. >> >> Jacques >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nk480 at cl.cam.ac.uk Thu Feb 7 11:44:50 2019 From: nk480 at cl.cam.ac.uk (Neel Krishnaswami) Date: Thu, 7 Feb 2019 10:44:50 +0000 Subject: [Agda] Abstract existential ? In-Reply-To: <91b6391a-dda1-e859-dd9e-f3aa3ffb98cb@cs.kuleuven.be> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <3ef4c30a-7561-d969-9201-e7e73e38d3ad@cs.kuleuven.be> <91b6391a-dda1-e859-dd9e-f3aa3ffb98cb@cs.kuleuven.be> Message-ID: <71a6713b-2bf3-7539-b981-92dbfde222be@cl.cam.ac.uk> Hi, Yes, you should read Atkey, Ghani and Johann's paper. It's really nice, and they prove strictly more than Derek and I did. Best, Neel On 07/02/2019 10:33, Andreas Nuyts wrote: > Correction: I think Krishnaswami & Dreyer only prove some corrolaries > of the given theorem. > > On 7/02/19 11:28, Andreas Nuyts wrote: >> Dear Jacques, >> >> You seem to suggest that the first component of your dependent pairs >> is going to be a type. Thus, it seems to me that what you are looking >> for is a parametric existential quantifier, as exists in System F, >> F?, Haskell, ... >> >> Parametric quantification is certainly not available in vanilla >> MLTT/Agda, but is implemented in an experimental branch of agda, >> called agda-parametric: >> * github branch: https://github.com/agda/agda/tree/parametric >> * example code: https://github.com/Saizan/parametric-demo >> * corresponding paper: "Parametric Quantifiers for Dependent Type >> Theory", ICFP 2017, https://doi.org/10.1145/3110276 >> I emphasize that - as far as I understand - the Agda implementation >> (by Andrea Vezzosi) is purely for research and there are currently no >> plans for continued support or integration in the master branch. >> >> If you want to use vanilla MLTT/Agda, then the following theorem may >> come in handy: >> >> ??? Any function in MLTT with small codomain, is parametric. >> >> >> (Some papers claim that ANY function in MLTT is parametric; this is >> true for a weaker definition of parametricity that is called >> continuity in our ICFP paper cited above, and that seems insufficient >> for your purposes.) >> >> What this boils down to is that any function of type >> (p : ?[ X \in Set ] P X) -> ... -> T, >> where T : Set 0, will satisfy the property you are looking for: its >> output does not depend on the first component of p. >> >> This is proven metatheoretically in: >> Atkey, Ghani, Johann, 2014, "A Relationally Parametric Model of >> Dependent Type Theory." >> Krishnaswami & Dreyer, 2013, "Internalizing Relational Parametricity >> in the Extensional Calculusof Constructions", >> Takeuti, 2001, "The Theory of Parametricity in Lambda Cube." >> >> The theorem breaks down if you add axioms such as (non-exhaustively): >> * choice / law of excluded middle: (X : Set) -> X + (X -> False) >> * resizing axioms >> >> Best regards, >> Andreas >> >> On 6/02/19 22:30, Jacques Carette wrote: >>> Is there a way to encode an existential in Agda where the "exists" >>> part of the dependent pair is abstract/private?? ? from the standard >>> library just says that the first part is implicit (i.e. can be >>> uniquely inferred). >>> >>> I think I could use the same trick as in Haskell (i.e. use a wrapper >>> where I don't export the constructor but do provide accessor >>> functions that don't leak), but that somehow seems heavy.? Is there >>> something simpler? >>> >>> I don't mean a fully non-constructive exists here: I mean >>> (informally!) "a dependent pair where the first projection is >>> abstract and cannot leak". So to build such a thing, a definite type >>> must be used, but once it is created, the 'clients' as it were, >>> cannot find out what that type is. >>> >>> Jacques >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -- Neel Krishnaswami nk480 at cl.cam.ac.uk -------------- next part -------------- An HTML attachment was scrubbed... URL: From carette at mcmaster.ca Thu Feb 7 17:34:22 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Thu, 7 Feb 2019 11:34:22 -0500 Subject: [Agda] Abstract existential ? In-Reply-To: <208DC8C3-C2EA-4192-A028-4F4933F1A62B@cl.cam.ac.uk> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <45be3320-3c21-db68-95d2-3ee41904c2fe@cs.bham.ac.uk> <644f7549-e793-ea0d-3ef5-127a3e50a82c@mcmaster.ca> <208DC8C3-C2EA-4192-A028-4F4933F1A62B@cl.cam.ac.uk> Message-ID: On 2019-02-07 3:45 a.m., Andrew Pitts wrote: > >> On 6 Feb 2019, at 22:06, Jacques Carette > > wrote: >> >> Thanks - I was aware that in HoTT/UF, this was just propositional >> truncation. And that in cubical Agda, this should just 'work'. But I >> am trying to get as far as possible with 'vanilla' Agda (without any >> axioms, for funext is out too). > > I guess you were hoping for some way of coding ?mere? existentials in > vanilla Agda using its ?abstract" or ?private? features. Correct. Or be warned off of trying because there a known problems... > However the semantics of those features is not well understood ? there > have been examples in the past where apparently private information > can leak in unexpected ways leading to logical inconsistency (for > example the disjointness property of constructors is hard to hide ? > see the last comment at > ). > Just like that. Thanks. Though I do think that the following 'trick' does work: module Hide where ? private ??? data ReallyHidden {? : Level} : Set (suc ?) where ????? box : (C : Set ?) ? ReallyHidden {?} ? Hidden : {? : Level} ? Set (suc ?) ? Hidden = ReallyHidden ? hide : {? : Level} ? Set ? ? Hidden ? hide C = box C The problem with the interval is that there are indeed 2 things that Agda can see as different. Here, we're using the plain old Haskell trick to encode existentials via a 'newtype'. Of course, to use the above, one most also define an 'existential' record in the same Hide module. > My own preference would be to restrict to a core of Agda that is > vanilla Martin-L?f Type Theory and then postulate an axiom that is > known to be consistent with it. Postulating quotients (of the kind > provided by default in Lean 3) works nicely and allows one to > side-step setoid hell (and as you probably know, implies function > extensionality as well). However this approach may not fit what you > have in mind to do with Agda. I'll try that too. Can you recommend some Agda code that 'postulates quotients' that I may learn from? Jacques -------------- next part -------------- An HTML attachment was scrubbed... URL: From carette at mcmaster.ca Thu Feb 7 18:11:43 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Thu, 7 Feb 2019 12:11:43 -0500 Subject: [Agda] Abstract existential ? In-Reply-To: <3ef4c30a-7561-d969-9201-e7e73e38d3ad@cs.kuleuven.be> References: <6bcd3784-b5d8-bc25-f042-09d96021f099@mcmaster.ca> <3ef4c30a-7561-d969-9201-e7e73e38d3ad@cs.kuleuven.be> Message-ID: Very nice paper, thanks for drawing my attention to it.? You are correct that I am looking for is "a parametric existential quantifier, as exists in System F, F?, Haskell, ...". Unfortunately, for my application, I am not sure I can work in Set 0. I could work in Set 1. But that's likely not small enough...? To be precise, I want to be able to hide a small type, but I want to produce a non-small type that depends on it parametrically. Jacques On 2019-02-07 5:28 a.m., Andreas Nuyts wrote: > Dear Jacques, > > You seem to suggest that the first component of your dependent pairs > is going to be a type. Thus, it seems to me that what you are looking > for is a parametric existential quantifier, as exists in System F, F?, > Haskell, ... > > Parametric quantification is certainly not available in vanilla > MLTT/Agda, but is implemented in an experimental branch of agda, > called agda-parametric: > * github branch: https://github.com/agda/agda/tree/parametric > * example code: https://github.com/Saizan/parametric-demo > * corresponding paper: "Parametric Quantifiers for Dependent Type > Theory", ICFP 2017, https://doi.org/10.1145/3110276 > I emphasize that - as far as I understand - the Agda implementation > (by Andrea Vezzosi) is purely for research and there are currently no > plans for continued support or integration in the master branch. > > If you want to use vanilla MLTT/Agda, then the following theorem may > come in handy: > > Any function in MLTT with small codomain, is parametric. > > > (Some papers claim that ANY function in MLTT is parametric; this is > true for a weaker definition of parametricity that is called > continuity in our ICFP paper cited above, and that seems insufficient > for your purposes.) > > What this boils down to is that any function of type > (p : ?[ X \in Set ] P X) -> ... -> T, > where T : Set 0, will satisfy the property you are looking for: its > output does not depend on the first component of p. > > This is proven metatheoretically in: > Atkey, Ghani, Johann, 2014, "A Relationally Parametric Model of > Dependent Type Theory." > Krishnaswami & Dreyer, 2013, "Internalizing Relational Parametricity > in the Extensional Calculusof Constructions", > Takeuti, 2001, "The Theory of Parametricity in Lambda Cube." > > The theorem breaks down if you add axioms such as (non-exhaustively): > * choice / law of excluded middle: (X : Set) -> X + (X -> False) > * resizing axioms > > Best regards, > Andreas > > On 6/02/19 22:30, Jacques Carette wrote: >> Is there a way to encode an existential in Agda where the "exists" >> part of the dependent pair is abstract/private?? ? from the standard >> library just says that the first part is implicit (i.e. can be >> uniquely inferred). >> >> I think I could use the same trick as in Haskell (i.e. use a wrapper >> where I don't export the constructor but do provide accessor >> functions that don't leak), but that somehow seems heavy.? Is there >> something simpler? >> >> I don't mean a fully non-constructive exists here: I mean >> (informally!) "a dependent pair where the first projection is >> abstract and cannot leak". So to build such a thing, a definite type >> must be used, but once it is created, the 'clients' as it were, >> cannot find out what that type is. >> >> Jacques >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From P.Achten at cs.ru.nl Fri Feb 8 09:32:43 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Fri, 8 Feb 2019 09:32:43 +0100 Subject: [Agda] [TFP'19] first call for papers: Trends in Functional Programming 2019, 12-14 June 2019, Vancouver, BC, CA (corrected dates and instructions) Message-ID: <405966c0-04c1-2d71-d178-c9e922154f09@cs.ru.nl> ???????????????? ------------------------------- ?????????????????? C A L L? F O R? P A P E R S ???????????????? ------------------------------- ????????????????????? ====== TFP 2019 ====== ????????? 20th Symposium on Trends in Functional Programming ?????????????????????????? 12-14 June, 2019 ????????????????????????? Vancouver, BC, CA ????????????????? https://www.tfp2019.org/index.html == Important Dates == Submission Deadline for pre-symposium formal review??? Thursday, March 28, 2019 Sumbission Deadline for Draft Papers?????????????????? Thursday, May 9, 2019 Notification for pre-symposium submissions???????????? Thursday, May 2, 2019 Notification for Draft Papers????????????????????????? Tuesday, May 14, 1029 TFPIE????????????????????????????????????????????????? Tuesday, June 11, 2019 Symposium Wednesday, June 12, 2019 ? Friday, June 14, 2019 Notification of Student Paper Feedback???????????????? Friday June 21, 2019 Submission Deadline for revised Draft Papers (post-symposium formal review) ?????????????????????????????????????????????????????? Thursday, August 1, 2019 Notification for post-symposium submissions??????????? Thursday, October 24, 2019 Camera Ready Deadline (both pre- and post-symposium)?? Friday, November 29, 2019 The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions (see below at scope). Please be aware that TFP uses two distinct rounds of submissions (see below at submission details). TFP 2019 will be the main event of a pair of functional programming events. TFP 2019 will be accompanied by the International Workshop on Trends in Functional Programming in Education (TFPIE), which will take place on June 11. == Scope == The symposium recognizes that new trends may arise through various routes. As part of the Symposium's focus on trends we therefore identify the following five article categories. High-quality articles are solicited in any of these categories: ??? Research Articles: ??????? Leading-edge, previously unpublished research work ??? Position Articles: ??????? On what new trends should or should not be ??? Project Articles: ??????? Descriptions of recently started new projects ??? Evaluation Articles: ??????? What lessons can be drawn from a finished project ??? Overview Articles: ??????? Summarizing work with respect to a trendy subject Articles must be original and not simultaneously submitted for publication to any other forum. They may consider any aspect of functional programming: theoretical, implementation-oriented, or experience-oriented. Applications of functional programming techniques to other languages are also within the scope of the symposium. Topics suitable for the symposium include, but are not limited to: ??? Functional programming and multicore/manycore computing ??? Functional programming in the cloud ??? High performance functional computing ??? Extra-functional (behavioural) properties of functional programs ??? Dependently typed functional programming ??? Validation and verification of functional programs ??? Debugging and profiling for functional languages ??? Functional programming in different application areas: ??? security, mobility, telecommunications applications, embedded ??? systems, global computing, grids, etc. ??? Interoperability with imperative programming languages ??? Novel memory management techniques ??? Program analysis and transformation techniques ??? Empirical performance studies ??? Abstract/virtual machines and compilers for functional languages ??? (Embedded) domain specific languages ??? New implementation strategies ??? Any new emerging trend in the functional programming area If you are in doubt on whether your article is within the scope of TFP, please contact the TFP 2019 program chairs, William J. Bowman and Ron Garcia. == Best Paper Awards == To reward excellent contributions, TFP awards a prize for the best paper accepted for the formal proceedings. TFP traditionally pays special attention to research students, acknowledging that students are almost by definition part of new subject trends. A student paper is one for which the authors state that the paper is mainly the work of students, the students are listed as first authors, and a student would present the paper. A prize for the best student paper is awarded each year. In both cases, it is the PC of TFP that awards the prize. In case the best paper happens to be a student paper, that paper will then receive both prizes. == Instructions to Author == Papers must be submitted at: ??? https://easychair.org/conferences/?conf=tfp2019 Authors of papers have the choice of having their contributions formally reviewed either before or after the Symposium. == Pre-symposium formal review == Papers to be formally reviewed before the symposium should be submitted before an early deadline and receive their reviews and notification of acceptance for both presentation and publication before the symposium. A paper that has been rejected in this process may still be accepted for presentation at the symposium, but will not be considered for the post-symposium formal review. == Post-symposium formal review == Papers submitted for post-symposium review (draft papers) will receive minimal reviews and notification of acceptance for presentation at the symposium. Authors of draft papers will be invited to submit revised papers based on the feedback received at the symposium. A post-symposium refereeing process will then select a subset of these articles for formal publication. == Paper categories == There are two types of submission, each of which can be submitted either for pre-symposium or post-symposium review: ??? Extended abstracts. Extended abstracts are 4 to 10 pages in length. ??? Full papers.??????? Full papers are up to 20 pages in length. Each submission also belongs to a category: ??? research ??? position ??? project ??? evaluation ??? overview paper Each submission should clearly indicate to which category it belongs. Additionally, a draft paper submission?of either type (extended abstract or full paper) and any category?can be considered a student paper. A student paper is one for which primary authors are research students and the majority of the work described was carried out by the students. The submission should indicate that it is a student paper. Student papers will receive additional feedback from the PC shortly after the symposium has taken place and before the post-symposium submission deadline. Feedback is only provided for accepted student papers, i.e., papers submitted for presentation and post-symposium formal review that are accepted for presentation. If a student paper is rejected for presentation, then it receives no further feedback and cannot be submitted for post-symposium review. == Format == Papers must be written in English, and written using the LNCS style. For more information about formatting please consult the Springer LNCS web site (http://www.springer.com/lncs). == Program Committee == Program Co-chairs William J. Bowman????????? University of British Columbia Ronald Garcia????????????? University of British Columbia Matteo Cimini????????????? University of Massachusetts Lowell Ryan Culpepper???????????? Czech Technical Institute Joshua Dunfield??????????? Queen's University Sam Lindley??????????????? University of Edinburgh Assia Mahboubi???????????? INRIA Nantes Christine Rizkallah??????? University of New South Wales Satnam Singh Marco T. Moraz?n?????????? Seton Hall University John Hughes??????????????? Chalmers University and Quviq Nicolas Wu???????????????? University of Bristol Tom Schrijvers???????????? KU Leuven Scott Smith??????????????? Johns Hopkins University Stephanie Balzer?????????? Carnegie Mellon University Vikt?ria Zs?k????????????? E?tv?s Lor?nd University From Thorsten.Altenkirch at nottingham.ac.uk Fri Feb 8 14:43:55 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Fri, 8 Feb 2019 13:43:55 +0000 Subject: [Agda] installing agda on windows Message-ID: Hi, I am currently running a module using agda and was trying to help a student installing agda on windows. So far I have failed but maybe somebody can give me some advice. Or better produce an installer that installed emacs+agda+libraries on a windows machine. The first problem was that agda-locate couldn?t find emacs. Ok, instead I just copied the code into .emacs. That seemed to work. However, I had no fun with the library. I created the .agda directory with libraries and the correct content but no effect. I guess it is looking somewhere else but where. When I try to run files from inside the library it complains that it cannot update some .agdai files. I guess this may be because the agda version and library version don?t match? Any advice? Cheers, Thorsten P.S. Agda version 2.5.4.2 windows 10 agda library v.0.17 (I think) This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Fri Feb 8 15:06:16 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Fri, 8 Feb 2019 15:06:16 +0100 Subject: [Agda] installing agda on windows In-Reply-To: References: Message-ID: According to the documentation ( https://agda.readthedocs.io/en/latest/tools/package-system.html#installing-libraries ) the `.agda` directory is called `C:\Users\USERNAME\AppData\Roaming\agda` on Windows. / Ulf On Fri, Feb 8, 2019 at 2:44 PM Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > Hi, > > > > I am currently running a module using agda and was trying to help a > student installing agda on windows. So far I have failed but maybe somebody > can give me some advice. Or better produce an installer that installed > emacs+agda+libraries on a windows machine. > > > > The first problem was that agda-locate couldn?t find emacs. Ok, instead I > just copied the code into .emacs. That seemed to work. However, I had no > fun with the library. I created the .agda directory with libraries and the > correct content but no effect. I guess it is looking somewhere else but > where. When I try to run files from inside the library it complains that it > cannot update some .agdai files. I guess this may be because the agda > version and library version don?t match? > > > > Any advice? > > > > Cheers, > > Thorsten > > > > P.S. > > Agda version 2.5.4.2 > > windows 10 > > agda library v.0.17 (I think) > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Fri Feb 8 15:07:55 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Fri, 8 Feb 2019 15:07:55 +0100 Subject: [Agda] installing agda on windows In-Reply-To: References: Message-ID: On 08/02/2019 14.43, Thorsten Altenkirch wrote: > Or better produce an installer that installed emacs+agda+libraries on > a windows machine. Doesn't Aaron Stump's installer work (http://homepage.divms.uiowa.edu/~astump/agda/AgdaBundle_2.5.4.2.v4.msi)? > The first problem was that agda-locate couldn?t find emacs. Perhaps Emacs wasn't installed on the PATH. > I created the .agda directory with libraries and the correct content > but no effect. I'm guessing that getAppUserDataDirectory is used: https://hackage.haskell.org/package/directory-1.3.3.2/docs/System-Directory.html#v:getAppUserDataDirectory Perhaps the directory is %APPDATA%/Agda. > When I try to run files from inside the library it complains that it > cannot update some .agdai files. Perhaps the library directory isn't writable. Maybe you could typecheck all the library files during the installation process. -- /NAD From nad at cse.gu.se Fri Feb 8 15:09:45 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Fri, 8 Feb 2019 15:09:45 +0100 Subject: [Agda] installing agda on windows In-Reply-To: References: Message-ID: <7867273c-5b7b-ccb7-03bd-99b23acf0fb0@cse.gu.se> On 08/02/2019 15.07, Nils Anders Danielsson wrote: > Perhaps the directory is %APPDATA%/Agda. Or rather %APPDATA%\agda, like Ulf wrote. -- /NAD From xqi01 at cs.tufts.edu Fri Feb 8 20:27:24 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Fri, 08 Feb 2019 14:27:24 -0500 Subject: [Agda] installing agda on windows In-Reply-To: References: Message-ID: <30067a28fa07d6b4075f7b28c71f087a96a5b52e.camel@cs.tufts.edu> At this point, I would suggest installing Windows Subsystem for Linux and XMing, and using Agda (& Emacs) from WSL, rather than trying to configure Agda on Windows. Both Agda and Emacs should work fine under WSL. Best, Ray -- Xuanrui (Ray) Qi xqi01 at cs.tufts.edu me at xuanruiqi.com https://www.xuanruiqi.com On Fri, 2019-02-08 at 13:43 +0000, Thorsten Altenkirch wrote: > Hi, > > I am currently running a module using agda and was trying to help a > student installing agda on windows. So far I have failed but maybe > somebody can give me some advice. Or better produce an installer that > installed emacs+agda+libraries on a windows machine. > > The first problem was that agda-locate couldn?t find emacs. Ok, > instead I just copied the code into .emacs. That seemed to work. > However, I had no fun with the library. I created the .agda directory > with libraries and the correct content but no effect. I guess it is > looking somewhere else but where. When I try to run files from inside > the library it complains that it cannot update some .agdai files. I > guess this may be because the agda version and library version don?t > match? > > Any advice? > > Cheers, > Thorsten > > P.S. > Agda version 2.5.4.2 > windows 10 > agda library v.0.17 (I think) > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From aaron-stump at uiowa.edu Fri Feb 8 21:40:08 2019 From: aaron-stump at uiowa.edu (Aaron Stump) Date: Fri, 8 Feb 2019 14:40:08 -0600 Subject: [Agda] installing agda on windows In-Reply-To: <30067a28fa07d6b4075f7b28c71f087a96a5b52e.camel@cs.tufts.edu> References: <30067a28fa07d6b4075f7b28c71f087a96a5b52e.camel@cs.tufts.edu> Message-ID: As Nils said, thanks to the IT staff here I can provide this installer for Agda 2.5.4.2: http://homepage.cs.uiowa.edu/~astump/agda/AgdaBundle_2.5.4.2.v4.msi It installs emacs, a decent free font for the standard Unicode symbols one typically uses in Agda, Haskell, and Agda.? We are using this in a class of 60 or so students mostly Windows users (we did not get to the Agda part of the class for this semester yet, just the Haskell part -- but I have confirmed Agda is working with this installer, for Windows 10). Aaron On 2/8/19 1:27 PM, Xuanrui Qi wrote: > At this point, I would suggest installing Windows Subsystem for Linux > and XMing, and using Agda (& Emacs) from WSL, rather than trying to > configure Agda on Windows. Both Agda and Emacs should work fine under > WSL. > > Best, > Ray > From sanzhiyan at gmail.com Sun Feb 10 22:50:31 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Sun, 10 Feb 2019 22:50:31 +0100 Subject: [Agda] Question about coinductive types In-Reply-To: <20190206092554.e3jm3l33adole7zg@d53.lama.univ-savoie.fr> References: <20190204124225.2bj7tvupl3tgcres@d53.lama.univ-savoie.fr> <20190206092554.e3jm3l33adole7zg@d53.lama.univ-savoie.fr> Message-ID: On Wed, Feb 6, 2019 at 10:26 AM Pierre Hyvernat wrote: > > > >Indeed, there is a proof that bisimilarity is (path-)equal to > >(path-)equality in our cubical library: > > > That's great! > Do you know if the case of streams generalizes to arbitrary "M-types", > or even better, greatest fixed points of indexed containers, at least > theoretically? It should. We can prove that indexed M types are the final coalgebra of an indexed container [1], so every expected property regarding the equality type should follow. [1] https://github.com/agda/cubical/blob/47254df222b04f8100c34518eaf56a88210de0d3/Cubical/Codata/M.agda Cheers, Andrea > Or put in other words, is cubical type theory compatible with the > property "bisimulation is equal to path-equality" for such general > notion of coinductive types? > > > >However Cubical Agda does not yet properly support all the features of > >Agda, in particular inductive families are not yet supported. So > >depending on what you want to do it might or might not currently suit > >your needs. > > > At the moment, my code doesn't use any "modern" (read univalence and > cubes) features and I prefer to keep it that way. > Some things might become possible, but probably not easy, nor > interesting. > (Using cubes, and equality over equalities has been on my TODO list for > some time though...) > > > Pierre > -- > When a distinguished but elderly scientist states that > something is possible, he is almost certainly right. > When he states that something is impossible, he is very > probably wrong. > -- Arthur C. Clarke > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From icfp.publicity at googlemail.com Wed Feb 13 19:14:37 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Wed, 13 Feb 2019 13:14:37 -0500 Subject: [Agda] Third Call for Papers: PACMPL issue ICFP 2019 Message-ID: <5c645e8d6a94d_1b92abe6f8c25b4326d9@hermes.mail> PACMPL Volume 3, Issue ICFP 2019 Call for Papers accepted papers to be invited for presentation at The 24th ACM SIGPLAN International Conference on Functional Programming Berlin, Germany http://icfp19.sigplan.org/ ### Important dates Submissions due: 1 March 2019 (Friday) Anywhere on Earth https://icfp19.hotcrp.com Author response: 16 April (Tuesday) - 18 Apri (Friday) 14:00 UTC Notification: 3 May (Friday) Final copy due: 22 June (Saturday) Conference: 18 August (Sunday) - 23 August (Friday) ### About PACMPL Proceedings of the ACM on Programming Languages (PACMPL ) is a Gold Open Access journal publishing research on all aspects of programming languages, from design to implementation and from mathematical formalisms to empirical studies. Each issue of the journal is devoted to a particular subject area within programming languages and will be announced through publicized Calls for Papers, like this one. ### Scope [PACMPL](https://pacmpl.acm.org/) issue ICFP 2019 seeks original papers on the art and science of functional programming. Submissions are invited on all topics from principles to practice, from foundations to features, and from abstraction to application. The scope includes all languages that encourage functional programming, including both purely applicative and imperative languages, as well as languages with objects, concurrency, or parallelism. Topics of interest include (but are not limited to): * *Language Design*: concurrency, parallelism, and distribution; modules; components and composition; metaprogramming; type systems; interoperability; domain-specific languages; and relations to imperative, object-oriented, or logic programming. * *Implementation*: abstract machines; virtual machines; interpretation; compilation; compile-time and run-time optimization; garbage collection and memory management; multi-threading; exploiting parallel hardware; interfaces to foreign functions, services, components, or low-level machine resources. * *Software-Development Techniques*: algorithms and data structures; design patterns; specification; verification; validation; proof assistants; debugging; testing; tracing; profiling. * *Foundations*: formal semantics; lambda calculus; rewriting; type theory; monads; continuations; control; state; effects; program verification; dependent types. * *Analysis and Transformation*: control-flow; data-flow; abstract interpretation; partial evaluation; program calculation. * *Applications*: symbolic computing; formal-methods tools; artificial intelligence; systems programming; distributed-systems and web programming; hardware design; databases; XML processing; scientific and numerical computing; graphical user interfaces; multimedia and 3D graphics programming; scripting; system administration; security. * *Education*: teaching introductory programming; parallel programming; mathematical proof; algebra. Submissions will be evaluated according to their relevance, correctness, significance, originality, and clarity. Each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. The technical content should be accessible to a broad audience. PACMPL issue ICFP 2019 also welcomes submissions in two separate categories — Functional Pearls and Experience Reports — that must be marked as such at the time of submission and that need not report original research results. Detailed guidelines on both categories are given at the end of this call. Please contact the principal editor if you have questions or are concerned about the appropriateness of a topic. ### Preparation of submissions **Deadline**: The deadline for submissions is **Friday, March 1, 2019**, Anywhere on Earth (). This deadline will be strictly enforced. **Formatting**: Submissions must be in PDF format, printable in black and white on US Letter sized paper, and interpretable by common PDF tools. All submissions must adhere to the "ACM Small" template that is available (in both LaTeX and Word formats) from . For authors using LaTeX, a lighter-weight package, including only the essential files, is available from . There is a limit of **25 pages for a full paper or Functional Pearl** and **12 pages for an Experience Report**; in either case, the bibliography will not be counted against these limits. Submissions that exceed the page limits or, for other reasons, do not meet the requirements for formatting, will be summarily rejected. Supplementary material can and should be **separately** submitted (see below). See also PACMPL's Information and Guidelines for Authors at . **Submission**: Submissions will be accepted at Improved versions of a paper may be submitted at any point before the submission deadline using the same web interface. **Author Response Period**: Authors will have a 72-hour period, starting at 14:00 UTC on **Tuesday, April 16, 2019**, to read reviews and respond to them. **Supplementary Material**: Authors have the option to attach supplementary material to a submission, on the understanding that reviewers may choose not to look at it. This supplementary material should **not** be submitted as part of the main document; instead, it should be uploaded as a **separate** PDF document or tarball. Supplementary material should be uploaded **at submission time**, not by providing a URL in the paper that points to an external repository. Authors are free to upload both anonymized and non-anonymized supplementary material. Anonymized supplementary material will be visible to reviewers immediately; non-anonymized supplementary material will be revealed to reviewers only after they have submitted their review of the paper and learned the identity of the author(s). **Authorship Policies**: All submissions are expected to comply with the ACM Policies for Authorship that are detailed at . **Republication Policies**: Each submission must adhere to SIGPLAN's republication policy, as explained on the web at . **Resubmitted Papers**: Authors who submit a revised version of a paper that has previously been rejected by another conference have the option to attach an annotated copy of the reviews of their previous submission(s), explaining how they have addressed these previous reviews in the present submission. If a reviewer identifies him/herself as a reviewer of this previous submission and wishes to see how his/her comments have been addressed, the principal editor will communicate to this reviewer the annotated copy of his/her previous review. Otherwise, no reviewer will read the annotated copies of the previous reviews. ### Review Process This section outlines the two-stage process with lightweight double-blind reviewing that will be used to select papers for PACMPL issue ICFP 2019. We anticipate that there will be a need to clarify and expand on this process, and we will maintain a list of frequently asked questions and answers on the conference website to address common concerns. **PACMPL issue ICFP 2019 will employ a two-stage review process.** The first stage in the review process will assess submitted papers using the criteria stated above and will allow for feedback and input on initial reviews through the author response period mentioned previously. At the review meeting, a set of papers will be conditionally accepted and all other papers will be rejected. Authors will be notified of these decisions on **May 3, 2019**. Authors of conditionally accepted papers will be provided with committee reviews (just as in previous conferences) along with a set of mandatory revisions. After four weeks (May 31, 2019), the authors will provide a second submission. The second and final reviewing phase assesses whether the mandatory revisions have been adequately addressed by the authors and thereby determines the final accept/reject status of the paper. The intent and expectation is that the mandatory revisions can be addressed within four weeks and hence that conditionally accepted papers will in general be accepted in the second phase. The second submission should clearly identify how the mandatory revisions were addressed. To that end, the second submission must be accompanied by a cover letter mapping each mandatory revision request to specific parts of the paper. The cover letter will facilitate a quick second review, allowing for confirmation of final acceptance within two weeks. Conversely, the absence of a cover letter will be grounds for the paper?s rejection. **PACMPL issue ICFP 2019 will employ a lightweight double-blind reviewing process.** To facilitate this, submitted papers must adhere to two rules: 1. **author names and institutions must be omitted**, and 2. **references to authors' own related work should be in the third person** (e.g., not "We build on our previous work ..." but rather "We build on the work of ..."). The purpose of this process is to help the reviewers come to an initial judgement about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult (e.g., important background references should not be omitted or anonymized). In addition, authors should feel free to disseminate their ideas or draft versions of their paper as they normally would. For instance, authors may post drafts of their papers on the web or give talks on their research ideas. ### Information for Authors of Accepted Papers * As a condition of acceptance, final versions of all papers must adhere to the new ACM Small format. The page limit for the final versions of papers will be increased by two pages to help authors respond to reviewer comments and mandatory revisions: **27 pages plus bibliography for a regular paper or Functional Pearl, 14 pages plus bibliography for an Experience Report**. * Authors of accepted submissions will be required to agree to one of the three ACM licensing options: open access on payment of a fee (**recommended**, and SIGPLAN can cover the cost as described next); copyright transfer to ACM; or retaining copyright but granting ACM exclusive publication rights. Further information about ACM author rights is available from . * PACMPL is a Gold Open Access journal. It will be archived in ACM?s Digital Library, but no membership or fee is required for access. Gold Open Access has been made possible by generous funding through ACM SIGPLAN, which will cover all open access costs in the event authors cannot. Authors who can cover the costs may do so by paying an Article Processing Charge (APC). PACMPL, SIGPLAN, and ACM Headquarters are committed to exploring routes to making Gold Open Access publication both affordable and sustainable. * ACM offers authors a range of copyright options, one of which is Creative Commons CC-BY publication; this is the option recommended by the PACMPL editorial board. A reasoned argument in favour of this option can be found in the article [Why CC-BY?](https://oaspa.org/why-cc-by/) published by OASPA, the Open Access Scholarly Publishers Association. * We intend that the papers will be freely available for download from the ACM Digital Library in perpetuity via the OpenTOC mechanism. * ACM Author-Izer is a unique service that enables ACM authors to generate and post links on either their home page or institutional repository for visitors to download the definitive version of their articles from the ACM Digital Library at no charge. Downloads through Author-Izer links are captured in official ACM statistics, improving the accuracy of usage and impact measurements. Consistently linking to the definitive version of an ACM article should reduce user confusion over article versioning. After an article has been published and assigned to the appropriate ACM Author Profile pages, authors should visit to learn how to create links for free downloads from the ACM DL. * At least one author of each accepted submissions will be expected to attend and present their paper at the conference. The schedule for presentations will be determined and shared with authors after the full program has been selected. Presentations will be videotaped and released online if the presenter consents. * The official publication date is the date the papers are made available in the ACM Digital Library. This date may be up to *two weeks prior* to the first day of the conference. The official publication date affects the deadline for any patent filings related to published work. ### Artifact Evaluation Authors of papers that are conditionally accepted in the first phase of the review process will be encouraged (but not required) to submit supporting materials for Artifact Evaluation. These items will then be reviewed by an Artifact Evaluation Committee, separate from the paper Review Committee, whose task is to assess how the artifacts support the work described in the associated paper. Papers that go through the Artifact Evaluation process successfully will receive a seal of approval printed on the papers themselves. Authors of accepted papers will be encouraged to make the supporting materials publicly available upon publication of the papers, for example, by including them as "source materials" in the ACM Digital Library. An additional seal will mark papers whose artifacts are made available, as outlined in the ACM guidelines for artifact badging. Participation in Artifact Evaluation is voluntary and will not influence the final decision regarding paper acceptance. ### Special categories of papers In addition to research papers, PACMPL issue ICFP solicits two kinds of papers that do not require original research contributions: Functional Pearls, which are full papers, and Experience Reports, which are limited to half the length of a full paper. Authors submitting such papers should consider the following guidelines. #### Functional Pearls A Functional Pearl is an elegant essay about something related to functional programming. Examples include, but are not limited to: * a new and thought-provoking way of looking at an old idea * an instructive example of program calculation or proof * a nifty presentation of an old or new data structure * an interesting application of functional programming techniques * a novel use or exposition of functional programming in the classroom While pearls often demonstrate an idea through the development of a short program, there is no requirement or expectation that they do so. Thus, they encompass the notions of theoretical and educational pearls. Functional Pearls are valued as highly and judged as rigorously as ordinary papers, but using somewhat different criteria. In particular, a pearl is not required to report original research, but, it should be concise, instructive, and entertaining. A pearl is likely to be rejected if its readers get bored, if the material gets too complicated, if too much specialized knowledge is needed, or if the writing is inelegant. The key to writing a good pearl is polishing. A submission that is intended to be treated as a pearl must be marked as such on the submission web page, and should contain the words "Functional Pearl" somewhere in its title or subtitle. These steps will alert reviewers to use the appropriate evaluation criteria. Pearls will be combined with ordinary papers, however, for the purpose of computing the conference's acceptance rate. #### Experience Reports The purpose of an Experience Report is to help create a body of published, refereed, citable evidence that functional programming really works — or to describe what obstacles prevent it from working. Possible topics for an Experience Report include, but are not limited to: * insights gained from real-world projects using functional programming * comparison of functional programming with conventional programming in the context of an industrial project or a university curriculum * project-management, business, or legal issues encountered when using functional programming in a real-world project * curricular issues encountered when using functional programming in education * real-world constraints that created special challenges for an implementation of a functional language or for functional programming in general An Experience Report is distinguished from a normal PACMPL issue ICFP paper by its title, by its length, and by the criteria used to evaluate it. * Both in the papers and in any citations, the title of each accepted Experience Report must end with the words "(Experience Report)" in parentheses. The acceptance rate for Experience Reports will be computed and reported separately from the rate for ordinary papers. * Experience Report submissions can be at most 12 pages long, excluding bibliography. * Each accepted Experience Report will be presented at the conference, but depending on the number of Experience Reports and regular papers accepted, authors of Experience reports may be asked to give shorter talks. * Because the purpose of Experience Reports is to enable our community to accumulate a body of evidence about the efficacy of functional programming, an acceptable Experience Report need not add to the body of knowledge of the functional-programming community by presenting novel results or conclusions. It is sufficient if the Report states a clear thesis and provides supporting evidence. The thesis must be relevant to ICFP, but it need not be novel. The review committee will accept or reject Experience Reports based on whether they judge the evidence to be convincing. Anecdotal evidence will be acceptable provided it is well argued and the author explains what efforts were made to gather as much evidence as possible. Typically, more convincing evidence is obtained from papers which show how functional programming was used than from papers which only say that functional programming was used. The most convincing evidence often includes comparisons of situations before and after the introduction or discontinuation of functional programming. Evidence drawn from a single person's experience may be sufficient, but more weight will be given to evidence drawn from the experience of groups of people. An Experience Report should be short and to the point: it should make a claim about how well functional programming worked on a particular project and why, and produce evidence to substantiate this claim. If functional programming worked in this case in the same ways it has worked for others, the paper need only summarize the results — the main part of the paper should discuss how well it worked and in what context. Most readers will not want to know all the details of the project and its implementation, but the paper should characterize the project and its context well enough so that readers can judge to what degree this experience is relevant to their own projects. The paper should take care to highlight any unusual aspects of the project. Specifics about the project are more valuable than generalities about functional programming; for example, it is more valuable to say that the team delivered its software a month ahead of schedule than it is to say that functional programming made the team more productive. If the paper not only describes experience but also presents new technical results, or if the experience refutes cherished beliefs of the functional-programming community, it may be better to submit it as a full paper, which will be judged by the usual criteria of novelty, originality, and relevance. The principal editor will be happy to advise on any concerns about which category to submit to. ### ICFP Organizers General Chair: Derek Dreyer (MPI-SWS, Germany) Artifact Evaluation Co-Chairs: Simon Marlow (Facebook, UK) Industrial Relations Chair: Alan Jeffrey (Mozilla Research, USA) Programming Contest Organiser: Ilya Sergey (Yale-NUS College, Singapore) Publicity and Web Chair: Sam Tobin-Hochstadt (Indiana University, USA) Student Research Competition Chair: William J. Bowman (University of British Columbia, Canada) Workshops Co-Chair: Christophe Scholliers (Universiteit Gent, Belgium) Jennifer Hackett (University of Nottingham, UK) Conference Manager: Annabel Satin (P.C.K.) ### PACMPL Volume 3, Issue ICFP 2019 Principal Editor: Fran?ois Pottier (Inria, France) Review Committee: Lennart Beringer (Princeton University, United States) Joachim Breitner (DFINITY Foundation, Germany) Laura M. Castro (University of A Coru?a, Spain) Ezgi ?i?ek (Facebook London, United Kingdom) Pierre-Evariste Dagand (LIP6/CNRS, France) Christos Dimoulas (Northwestern University, United States) Jacques-Henri Jourdan (CNRS, LRI, Universit? Paris-Sud, France) Andrew Kennedy (Facebook London, United Kingdom) Daan Leijen (Microsoft Research, United States) Kazutaka Matsuda (Tohoku University, Japan) Bruno C. d. S. Oliveira (University of Hong Kong, China) Klaus Ostermann (University of T?bingen, Germany) Jennifer Paykin (Galois, United States) Frank Pfenning (Carnegie Mellon University, USA) Mike Rainey (Indiana University, USA) Chung-chieh Shan (Indiana University, USA) Sam Staton (University of Oxford, UK) Pierre-Yves Strub (Ecole Polytechnique, France) German Vidal (Universitat Politecnica de Valencia, Spain) External Review Committee: Michael D. Adams (University of Utah, USA) Robert Atkey (University of Strathclyde, IK) Sheng Chen (University of Louisiana at Lafayette, USA) James Cheney (University of Edinburgh, UK) Adam Chlipala (Massachusetts Institute of Technology, USA) Evelyne Contejean (LRI, Universit? Paris-Sud, France) Germ?n Andr?s Delbianco (IRIF, Universit? Paris Diderot, France) Dominique Devriese (Vrije Universiteit Brussel, Belgium) Richard A. Eisenberg (Bryn Mawr College, USA) Conal Elliott (Target, USA) Sebastian Erdweg (Delft University of Technology, Netherlands) Michael Greenberg (Pomona College, USA) Adrien Guatto (IRIF, Universit? Paris Diderot, France) Jennifer Hackett (University of Nottingham, UK) Troels Henriksen (University of Copenhagen, Denmark) Chung-Kil Hur (Seoul National University, Republic of Korea) Roberto Ierusalimschy (PUC-Rio, Brazil) Ranjit Jhala (University of California, San Diego, USA) Ralf Jung (MPI-SWS, Germany) Ohad Kammar (University of Oxford, UK) Oleg Kiselyov (Tohoku University, Japan) Hsiang-Shang ?Josh? Ko (National Institute of Informatics, Japan) Ond?ej Lhot?k (University of Waterloo, Canada) Dan Licata (Wesleyan University, USA) Geoffrey Mainland (Drexel University, USA) Simon Marlow (Facebook, UK) Akimasa Morihata (University of Tokyo, Japan) Shin-Cheng Mu (Academia Sinica, Taiwan) Guillaume Munch-Maccagnoni (Inria, France) Kim Nguy?n (University of Paris-Sud, France) Ulf Norell (Gothenburg University, Sweden) Atsushi Ohori (Tohoku University, Japan) Rex Page (University of Oklahoma, USA) Zoe Paraskevopoulou (Princeton University, USA) Nadia Polikarpova (University of California, San Diego, USA) Jonathan Protzenko (Microsoft Research, USA) Tiark Rompf (Purdue University, USA) Andreas Rossberg (Dfinity, Germany) KC Sivaramakrishnan (University of Cambridge, UI) Nicholas Smallbone (Chalmers University of Technology, Sweden) Matthieu Sozeau (Inria, France) Sandro Stucki (Chalmers | University of Gothenburg, Sweden) Don Syme (Microsoft, UK) Zachary Tatlock (University of Washington, USA) Sam Tobin-Hochstadt (Indiana University, USA) Takeshi Tsukada (University of Tokyo, Japan) Tarmo Uustalu (Reykjavik University, Iceland) Benoit Valiron (LRI, CentraleSupelec, Univ. Paris Saclay, France) Daniel Winograd-Cort (University of Pennsylvania, USA) Nicolas Wu (University of Bristol, UK) From icfp.publicity at googlemail.com Wed Feb 13 19:29:02 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Wed, 13 Feb 2019 13:29:02 -0500 Subject: [Agda] Call for Submissions: ICFP Student Research Competition Message-ID: <5c6461ee6e3da_77d2b0585e545c4986c@hermes.mail> ICFP 2019 Student Research Competition Call for Submissions ICFP invites students to participate in the Student Research Competition in order to present their research and get feedback from prominent members of the programming language research community. Please submit your extended abstracts through the submission website. ### Important dates Submissions due: 14 Jun 2019 (Friday) https://icfp19src.hotcrp.com Notification: 28 Jun 2019 (Friday) Conference: 18 August (Sunday) - 23 August (Friday) Each submission (referred to as "abstract" below) should include the student author?s name and e-mail address; institutional affiliation; research advisor?s name; ACM student member number; category (undergraduate or graduate); research title; and an extended abstract addressing the following: * Problem and Motivation: Clearly state the problem being addressed and explain the reasons for seeking a solution to this problem. * Background and Related Work: Describe the specialized (but pertinent) background necessary to appreciate the work in the context of ICFP areas of interest. Include references to the literature where appropriate, and briefly explain where your work departs from that done by others. * Approach and Uniqueness: Describe your approach in addressing the problem and clearly state how your approach is novel. * Results and Contributions: Clearly show how the results of your work contribute to programming language design and implementation in particular and to computer science in general; explain the significance of those results. * Submissions must be original research that is not already published at ICFP or another conference or journal. One of the goals of the SRC is to give students feedback on ongoing, unpublished work. Furthermore, the abstract must be authored solely by the student. If the work is collaborative with others and*or part of a larger group project, the abstract should make clear what the student?s role was and should focus on that portion of the work. * Formatting: Submissions must be in PDF format, printable in black and white on US Letter sized paper, and interpretable by common PDF tools. All submissions must adhere to the "ACM Small" template that is available (in both LaTeX and Word formats) from https://www.acm.org/publications/authors/submissions. For authors using LaTeX, a lighter-weight package, including only the essential files, is available from http://sigplan.org/Resources/Author/#acmart-format. The submission must not exceed 3 pages in PDF format. Reference lists do not count towards the 3-page limit. Further information is available at the ICFP SRC website: https://icfp19.sigplan.org/track/icfp-2019-Student-Research-Competition ICFP Student Research Competition Chair: William J. Bowman (University of British Columbia) From pierre.hyvernat at univ-smb.fr Wed Feb 13 22:45:48 2019 From: pierre.hyvernat at univ-smb.fr (Pierre Hyvernat) Date: Wed, 13 Feb 2019 22:45:48 +0100 Subject: [Agda] Error in pattern matching dependent family Message-ID: <20190213214548.tjx42o7eoeh3i757@kiwi> Hello... I've run into a new (for me) error while working with equality: Agda complains that "I'm not sure if there should be a case for the constructor ..." Here is a minimal file illustrating my problem: ===== 8< ===== module test where -- the same happens with the builtin equality data _==_ {A : Set} (a : A) : A ? Set where IDP : a == a test : (X : Set) (x y : X) ? (f : X ? X) ? (f x == f y) ? (f y == f x) test X x y f IDP = IDP -- test : (X : Set) (x : X) ? (f : X ? X) ? (f x == x) ? (x == f x) -- test X x f IDP = IDP ============== The whole error message is I'm not sure if there should be a case for the constructor IDP, because I get stuck when trying to solve the following unification problems (inferred index ? expected index): f x ? f y when checking that the pattern IDP has type f x == f y I know I can prove this by generalizing and proving symmetry of _==_, or by defining and using the J eliminator for _==_. But is possible to do that directly with pattern matching? The error message isn't very helpful. In my case, the output type (here "f y == f x") is quite big, and there are many more arguments with many dependencies. Generalizing is something I'd like to avoid... If that matters, in my case, it actually happens when trying to write a definition like test f x with previous-function (f x) test f x | refl = ... Pierre -- Gravity is a myth, the Earth sucks. From james.wood.100 at strath.ac.uk Thu Feb 14 14:59:53 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Thu, 14 Feb 2019 13:59:53 +0000 Subject: [Agda] Error in pattern matching dependent family In-Reply-To: <20190213214548.tjx42o7eoeh3i757@kiwi> References: <20190213214548.tjx42o7eoeh3i757@kiwi> Message-ID: Hi Pierre, This happens because, as far as the unifier is concerned, f need not be injective. So there's not really anything that can be done about x and y. Generalisation is the only way out. If you want a practical way out, you probably should use rewrite. test : (X : Set) (x y : X) ? (f : X ? X) ? (f x == f y) ? (f y == f x) test X x y f eq rewrite eq = IDP The documentation explains it, but it basically automates the with abstraction you want to do. Best wishes, James On 13/02/2019 21:45, Pierre Hyvernat wrote: > Hello... > > I've run into a new (for me) error while working with equality: > Agda complains that > > "I'm not sure if there should be a case for the constructor ..." > > Here is a minimal file illustrating my problem: > > ===== 8< ===== > module test where > > -- the same happens with the builtin equality > data _==_ {A : Set} (a : A) : A ? Set where > ?IDP : a == a > > test : (X : Set) (x y : X) ? (f : X ? X) ? (f x == f y) ? (f y == f x) > test X x y f IDP = IDP > > -- test : (X : Set) (x : X) ? (f : X ? X) ? (f x == x) ? (x == f x) > -- test X x f IDP = IDP > > ============== > > The whole error message is > ? I'm not sure if there should be a case for the constructor IDP, > ? because I get stuck when trying to solve the following unification > ? problems (inferred index ? expected index): > ??? f x ? f y > ? when checking that the pattern IDP has type f x == f y > > I know I can prove this by generalizing and proving symmetry of _==_, or > by defining and using the J eliminator for _==_. > But is possible to do that directly with pattern matching? The error > message isn't very helpful. > > In my case, the output type (here "f y == f x") is quite big, and there > are many more arguments with many dependencies. Generalizing is > something I'd like to avoid... > > > If that matters, in my case, it actually happens when trying to write a > definition like > > ?? test f x with previous-function (f x) > ?? test f x | refl = ... > > > Pierre -- James Wood, Department of Computer and Information Sciences, University of Strathclyde. The University of Strathclyde is a charitable body, registered in Scotland, with registration number SC015263. From noam.zeilberger at gmail.com Thu Feb 14 20:20:34 2019 From: noam.zeilberger at gmail.com (Noam Zeilberger) Date: Thu, 14 Feb 2019 19:20:34 +0000 Subject: [Agda] agda-mode question: custom variable naming strategy for case split? Message-ID: Hello all, I have a very superficial question: is there an easy way of modifying the rules that agda-mode uses for choosing variable names? Like, say I have a type A with some constructors ... binary : A ? A ? A ternary : A ? A ? A ? A and I want to define a function foo : A ? A foo x = ? then case splitting on x will yield clauses of the form ... foo (binary x x?) = {!!} foo (ternary x x? x?) = {!!} but what if I actually want to name the variables x1, x2, and x3, say, or x, y, and z? Of course I could just go ahead and rename the auto-generated variables + C-c C-l, but this gets frustrating after a while... It would be nice to be able to specify a simple set of naming rules to be used throughout an interaction. Sorry for asking such a superficial question! Noam -------------- next part -------------- An HTML attachment was scrubbed... URL: From noam.zeilberger at gmail.com Thu Feb 14 21:02:38 2019 From: noam.zeilberger at gmail.com (Noam Zeilberger) Date: Thu, 14 Feb 2019 20:02:38 +0000 Subject: [Agda] agda-mode question: custom variable naming strategy for case split? In-Reply-To: <20190214195546.GB15043@x1> References: <20190214195546.GB15043@x1> Message-ID: Thanks Wouter, Oleg Grenrus also just told me about this feature, which seems very intuitive. However, it doesn't seem to work on my version of agda! After adding variable names in pi types for the constructors binary and ternary, case splitting still gives me foo (binary x x?) = {!!} foo (ternary x x? x?) = {!!} Is this a feature which was added after 2.5.4.2? Noam On Thu, 14 Feb 2019 at 19:55, Swierstra, W.S. (Wouter) wrote: > Hi Noam, > > If you add spurious variable names when declaring the types of your > constructors, such as: > > > ... > > binary : (l : A) ? (r : A) ? A > > ternary : (l : A) ? (m : A) ? (r : A) ? A > > Case splitting should produce: > > > foo (binary l r) = {!!} > > foo (ternary l m r) = {!!} > > Or at least generate some name like l? if l is already in scope. Hope this > helps, > > Wouter > -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.brunerie at gmail.com Thu Feb 14 21:45:51 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Thu, 14 Feb 2019 21:45:51 +0100 Subject: [Agda] agda-mode question: custom variable naming strategy for case split? In-Reply-To: References: <20190214195546.GB15043@x1> Message-ID: I think that this feature only works for non-recursive arguments. See the bug report https://github.com/agda/agda/issues/3214. Best, Guillaume Den tors 14 feb. 2019 kl 21:02 skrev Noam Zeilberger : > > Thanks Wouter, Oleg Grenrus also just told me about this feature, which seems very intuitive. > > However, it doesn't seem to work on my version of agda! After adding variable names in pi types for the constructors binary and ternary, case splitting still gives me > > foo (binary x x?) = {!!} > foo (ternary x x? x?) = {!!} > > Is this a feature which was added after 2.5.4.2? > > Noam > > On Thu, 14 Feb 2019 at 19:55, Swierstra, W.S. (Wouter) wrote: >> >> Hi Noam, >> >> If you add spurious variable names when declaring the types of your constructors, such as: >> >> > ... >> > binary : (l : A) ? (r : A) ? A >> > ternary : (l : A) ? (m : A) ? (r : A) ? A >> >> Case splitting should produce: >> >> > foo (binary l r) = {!!} >> > foo (ternary l m r) = {!!} >> >> Or at least generate some name like l? if l is already in scope. Hope this helps, >> >> Wouter > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From noam.zeilberger at gmail.com Thu Feb 14 21:54:00 2019 From: noam.zeilberger at gmail.com (Noam Zeilberger) Date: Thu, 14 Feb 2019 20:54:00 +0000 Subject: [Agda] agda-mode question: custom variable naming strategy for case split? In-Reply-To: References: <20190214195546.GB15043@x1> Message-ID: Yes, that must be the issue, thanks! Reproduced the behavior below: data A : Set where binary : (l : A) ? (r : A) ? A ternary : (l : A) ? (m : A) ? (r : A) ? A data B : Set where binary : (l : A) ? (r : A) ? B ternary : (l : A) ? (m : A) ? (r : A) ? B f : A ? A f (binary x x?) = {!!} f (ternary x x? x?) = {!!} g : B ? B g (binary l r) = {!!} g (ternary l m r) = {!!} On Thu, 14 Feb 2019 at 20:46, Guillaume Brunerie < guillaume.brunerie at gmail.com> wrote: > I think that this feature only works for non-recursive arguments. > See the bug report https://github.com/agda/agda/issues/3214. > > Best, > Guillaume > > Den tors 14 feb. 2019 kl 21:02 skrev Noam Zeilberger > : > > > > Thanks Wouter, Oleg Grenrus also just told me about this feature, which > seems very intuitive. > > > > However, it doesn't seem to work on my version of agda! After adding > variable names in pi types for the constructors binary and ternary, case > splitting still gives me > > > > foo (binary x x?) = {!!} > > foo (ternary x x? x?) = {!!} > > > > Is this a feature which was added after 2.5.4.2? > > > > Noam > > > > On Thu, 14 Feb 2019 at 19:55, Swierstra, W.S. (Wouter) < > W.S.Swierstra at uu.nl> wrote: > >> > >> Hi Noam, > >> > >> If you add spurious variable names when declaring the types of your > constructors, such as: > >> > >> > ... > >> > binary : (l : A) ? (r : A) ? A > >> > ternary : (l : A) ? (m : A) ? (r : A) ? A > >> > >> Case splitting should produce: > >> > >> > foo (binary l r) = {!!} > >> > foo (ternary l m r) = {!!} > >> > >> Or at least generate some name like l? if l is already in scope. Hope > this helps, > >> > >> Wouter > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Thu Feb 14 23:28:42 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Thu, 14 Feb 2019 22:28:42 +0000 Subject: [Agda] Let bindings unpacking irrefutable patterns Message-ID: Hi, consider following program: ``` foo : ? {A : Set} {B : ? (a : A) ? Set} ? ? A B ? Set foo tup = let x , y = tup in {!!} ``` In the hole there, we can see the following environment: ``` Goal: Set ???????????????????????????????????????????????????????????? y : .B (proj? tup) x : .A tup : ? .A .B .B : .A ? Set .A : Set ``` I think the highlighted part is quite unexpected, as I would consider let bindings have the same effect as with patterns when dealing with irrefutable patterns. In particular, I'd hope y has type `.B x` in this case. Is this a bug or expected behavior? I am asking this because it's quite confusing as it seems to indicate let bindings are very weak in agda. Sincerely Yours, Jason Hu -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.allais at ens-lyon.org Fri Feb 15 13:08:23 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Fri, 15 Feb 2019 13:08:23 +0100 Subject: [Agda] Let bindings unpacking irrefutable patterns In-Reply-To: References: Message-ID: <7c75ee69-d4c6-f56a-4140-3d456a0f31c9@ens-lyon.org> Hi, This is a known problem (https://github.com/agda/agda/issues/1181) and unfortunately has not been fixed yet. It's in the 'icebox' meaning that if anyone contributes a fix, it'll be gladly accepted but there is no set deadline for it. Cheers, -- gallais On 14/02/2019 23:28, Jason -Zhong Sheng- Hu wrote: > Hi, > > consider following program: > > ``` > foo : ? {A : Set} {B : ? (a : A) ? Set} ? ? A B ? Set > foo tup = let x , y = tup in {!!} > ``` > > In the hole there, we can see the following environment: > > ``` > Goal: Set > ???????????????????????????????????????????????????????????? > y : .B (proj? tup) > x : .A > tup : ? .A .B > .B : .A ? Set > .A : Set > ``` > > I think the highlighted part is quite unexpected, as I would consider let bindings have the same effect as with patterns when dealing with irrefutable patterns. In particular, I'd hope y has type `.B x` in this case. Is this a bug or expected behavior? I am asking this because it's quite confusing as it seems to indicate let bindings are very weak in agda. > > Sincerely Yours, > > Jason Hu > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From andreas.nuyts at cs.kuleuven.be Fri Feb 15 14:20:59 2019 From: andreas.nuyts at cs.kuleuven.be (Andreas Nuyts) Date: Fri, 15 Feb 2019 14:20:59 +0100 Subject: [Agda] Let bindings unpacking irrefutable patterns In-Reply-To: <7c75ee69-d4c6-f56a-4140-3d456a0f31c9@ens-lyon.org> References: <7c75ee69-d4c6-f56a-4140-3d456a0f31c9@ens-lyon.org> Message-ID: <864cd686-38c1-f68f-5f68-b7df78ffe611@cs.kuleuven.be> It doesn't really matter, though, as Agda acknowledges that they are definitionally equal: ``` module LetPatterns where open import Data.Product open import Relation.Binary.PropositionalEquality _?_ : (A : Set) (a : A) ? A A ? a = a foo : ? {A : Set} {B : ? (a : A) ? Set} ? (p : ? A B) ? proj? p ? proj? p foo tup = let x , y = tup in (x ? proj? tup) ? refl ``` Andreas On 15/02/19 13:08, Guillaume Allais wrote: > Hi, > > This is a known problem (https://github.com/agda/agda/issues/1181) > and unfortunately has not been fixed yet. It's in the 'icebox' meaning > that if anyone contributes a fix, it'll be gladly accepted but there > is no set deadline for it. > > Cheers, > -- > gallais > > On 14/02/2019 23:28, Jason -Zhong Sheng- Hu wrote: >> Hi, >> >> consider following program: >> >> ``` >> foo : ? {A : Set} {B : ? (a : A) ? Set} ? ? A B ? Set >> foo tup = let x , y = tup in {!!} >> ``` >> >> In the hole there, we can see the following environment: >> >> ``` >> Goal: Set >> ???????????????????????????????????????????????????????????? >> y : .B (proj? tup) >> x : .A >> tup : ? .A .B >> .B : .A ? Set >> .A : Set >> ``` >> >> I think the highlighted part is quite unexpected, as I would consider let bindings have the same effect as with patterns when dealing with irrefutable patterns. In particular, I'd hope y has type `.B x` in this case. Is this a bug or expected behavior? I am asking this because it's quite confusing as it seems to indicate let bindings are very weak in agda. >> >> Sincerely Yours, >> >> Jason Hu >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Fri Feb 15 14:30:18 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Fri, 15 Feb 2019 13:30:18 +0000 Subject: [Agda] Let bindings unpacking irrefutable patterns In-Reply-To: <864cd686-38c1-f68f-5f68-b7df78ffe611@cs.kuleuven.be> References: <7c75ee69-d4c6-f56a-4140-3d456a0f31c9@ens-lyon.org>, <864cd686-38c1-f68f-5f68-b7df78ffe611@cs.kuleuven.be> Message-ID: That's because product itself having definitional eta expansion, isn't it? What about those having not? Let me try later. Thanks, Jason Hu On Feb 15, 2019 08:24, Andreas Nuyts wrote: It doesn't really matter, though, as Agda acknowledges that they are definitionally equal: ``` module LetPatterns where open import Data.Product open import Relation.Binary.PropositionalEquality _?_ : (A : Set) (a : A) ? A A ? a = a foo : ? {A : Set} {B : ? (a : A) ? Set} ? (p : ? A B) ? proj? p ? proj? p foo tup = let x , y = tup in (x ? proj? tup) ? refl ``` Andreas On 15/02/19 13:08, Guillaume Allais wrote: Hi, This is a known problem (https://github.com/agda/agda/issues/1181) and unfortunately has not been fixed yet. It's in the 'icebox' meaning that if anyone contributes a fix, it'll be gladly accepted but there is no set deadline for it. Cheers, -- gallais On 14/02/2019 23:28, Jason -Zhong Sheng- Hu wrote: Hi, consider following program: ``` foo : ? {A : Set} {B : ? (a : A) ? Set} ? ? A B ? Set foo tup = let x , y = tup in {!!} ``` In the hole there, we can see the following environment: ``` Goal: Set ???????????????????????????????????????????????????????????? y : .B (proj? tup) x : .A tup : ? .A .B .B : .A ? Set .A : Set ``` I think the highlighted part is quite unexpected, as I would consider let bindings have the same effect as with patterns when dealing with irrefutable patterns. In particular, I'd hope y has type `.B x` in this case. Is this a bug or expected behavior? I am asking this because it's quite confusing as it seems to indicate let bindings are very weak in agda. Sincerely Yours, Jason Hu _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Sun Feb 17 08:56:35 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Sun, 17 Feb 2019 07:56:35 +0000 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> Message-ID: <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> On 17/02/2019, 01:25, "homotopytypetheory at googlegroups.com on behalf of Michael Shulman" wrote: However, I don't find it arbitrary at all: *negative* types have strict eta, while positive types don't. This is a very good point. However Streams are negative types but for example agda doesn't use eta conversion on them, I think for a good reason. Actually I am not completely sure whether this is undecidable. E.g. the following equation cannot be proven using refl (it can be proven in cubical agda btw). The corresponding equation for Sigma types holds definitionally. infix 5 _?_ record Stream (A : Set) : Set where constructor _?_ coinductive field hd : A tl : Stream A open Stream etaStream : {A : Set}{s : Stream A} ? hd s ? tl s ? s etaStream = {!refl!} ?CCed to the agda list. Maybe somebody can comment on the decidabilty status? This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From shulman at sandiego.edu Sun Feb 17 10:18:46 2019 From: shulman at sandiego.edu (Michael Shulman) Date: Sun, 17 Feb 2019 01:18:46 -0800 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> Message-ID: Well, I'm not really convinced that coinductive types should be treated as basic type formers, rather than simply constructed out of inductive types and extensional functions. For one thing, I have no idea how to construct coinductive types as basic type formers in homotopical models. I think the issue that you raise, Thorsten, could be regarded as another argument against treating them basically, or at least against regarding them as really "negative" in the same way that Pis and (negative) Sigmas are. And as for adding random extra strict equalities pertaining certain positive types that happen to hold in some particular model, Matt, I would say similarly that the general perspective gives yet another reason why you shouldn't do that. (-: But the real point is that the general perspective I was proposing doesn't claim to be the *only* way to do things; obviously it isn't. It's just a non-arbitrary "baseline" that is consistent and makes sense and matches a common core of equalities used in many type theories, so that when you deviate from it you're aware that you're being deviant. (-: On Sat, Feb 16, 2019 at 11:56 PM Thorsten Altenkirch wrote: > > On 17/02/2019, 01:25, "homotopytypetheory at googlegroups.com on behalf of Michael Shulman" wrote: > > However, I don't find it > arbitrary at all: *negative* types have strict eta, while positive > types don't. > > This is a very good point. However Streams are negative types but for example agda doesn't use eta conversion on them, I think for a good reason. Actually I am not completely sure whether this is undecidable. > > E.g. the following equation cannot be proven using refl (it can be proven in cubical agda btw). The corresponding equation for Sigma types holds definitionally. > > infix 5 _?_ > > record Stream (A : Set) : Set where > constructor _?_ > coinductive > field > hd : A > tl : Stream A > > open Stream > etaStream : {A : Set}{s : Stream A} ? hd s ? tl s ? s > etaStream = {!refl!} > > ?CCed to the agda list. Maybe somebody can comment on the decidabilty status? > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > -- > You received this message because you are subscribed to the Google Groups "Homotopy Type Theory" group. > To unsubscribe from this group and stop receiving emails from it, send an email to HomotopyTypeTheory+unsubscribe at googlegroups.com. > For more options, visit https://groups.google.com/d/optout. From Thorsten.Altenkirch at nottingham.ac.uk Sun Feb 17 11:52:45 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Sun, 17 Feb 2019 10:52:45 +0000 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> Message-ID: <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> For me the idea of inductive vs coinductive or how I called this a while ago data vs codata is an important basic intuition which comes before formal model constructions. Types are defined by constructors or by destructors, eg coproducts are defined by constructors while functions are defined by destructors, namely application. That is a function is something you can apply to arguments obtaining a result. Lambda is a derived construction, I can construct a function if I have a method to compute the result. Similarily natural numbers and lists are given by constructors, while streams are defined by destructors, to give a stream means to be able to say what its head and its tail are. And that is perfectly right Sigma types can be either given by a constructor or by destructors so in this sense they are twitters. There are reductions which just means that certain type formers are universal in that we can define all other from them, e.g. function types together with some inductive types are sufficient to derive a certain class of codata types. That doesn't mean that the dichotomy between data and codata isn't an important basic intuition. ?On 17/02/2019, 09:19, "Michael Shulman" wrote: Well, I'm not really convinced that coinductive types should be treated as basic type formers, rather than simply constructed out of inductive types and extensional functions. For one thing, I have no idea how to construct coinductive types as basic type formers in homotopical models. I think the issue that you raise, Thorsten, could be regarded as another argument against treating them basically, or at least against regarding them as really "negative" in the same way that Pis and (negative) Sigmas are. And as for adding random extra strict equalities pertaining certain positive types that happen to hold in some particular model, Matt, I would say similarly that the general perspective gives yet another reason why you shouldn't do that. (-: But the real point is that the general perspective I was proposing doesn't claim to be the *only* way to do things; obviously it isn't. It's just a non-arbitrary "baseline" that is consistent and makes sense and matches a common core of equalities used in many type theories, so that when you deviate from it you're aware that you're being deviant. (-: On Sat, Feb 16, 2019 at 11:56 PM Thorsten Altenkirch wrote: > > On 17/02/2019, 01:25, "homotopytypetheory at googlegroups.com on behalf of Michael Shulman" wrote: > > However, I don't find it > arbitrary at all: *negative* types have strict eta, while positive > types don't. > > This is a very good point. However Streams are negative types but for example agda doesn't use eta conversion on them, I think for a good reason. Actually I am not completely sure whether this is undecidable. > > E.g. the following equation cannot be proven using refl (it can be proven in cubical agda btw). The corresponding equation for Sigma types holds definitionally. > > infix 5 _?_ > > record Stream (A : Set) : Set where > constructor _?_ > coinductive > field > hd : A > tl : Stream A > > open Stream > etaStream : {A : Set}{s : Stream A} ? hd s ? tl s ? s > etaStream = {!refl!} > > CCed to the agda list. Maybe somebody can comment on the decidabilty status? > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > -- > You received this message because you are subscribed to the Google Groups "Homotopy Type Theory" group. > To unsubscribe from this group and stop receiving emails from it, send an email to HomotopyTypeTheory+unsubscribe at googlegroups.com. > For more options, visit https://groups.google.com/d/optout. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From Thorsten.Altenkirch at nottingham.ac.uk Sun Feb 17 12:44:26 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Sun, 17 Feb 2019 11:44:26 +0000 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> Message-ID: But function types are neither inductive nor conductive. Only N-> (-) ist coinductive. In presence of function types most coinductive types can be implemented. You think of terminal coalgebras - that is not what I mean. To avoid this confusion I am using the term codata but most people in CS understand coinductive better. You can define a type by saying how elements can be constructed, this is data Alternatively you say what you can do with it, i.e. how elements can be destructed. The function type is not data, functions are not understood by the way they are constructed but what you can do with it. A function is something you can apply to an argument and you get a result. Codata types always introduce non-trivial equalities, because all you can do with a function is applying it to arguments two functions which provide the same output for all inputs are equal. Hence functional extensionality should hold. Maybe coinductive is a style of programming but nothing really foundational. I think you miss something important here. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From andreas.abel at ifi.lmu.de Sun Feb 17 15:22:23 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Sun, 17 Feb 2019 15:22:23 +0100 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> Message-ID: > ?CCed to the agda list. Maybe somebody can comment on the decidabilty status? Ulrich Berger and Anton Setzer: Undecidability of Equality for Codata Types Talk given at CMCS'18 Thessaloniki, Greece, 15 April 2018 http://www.cs.swan.ac.uk/~csetzer/articles/CMCS2018/bergerSetzerProceedingsCMCS18.pdf On 2019-02-17 08:56, Thorsten Altenkirch wrote: > On 17/02/2019, 01:25, "homotopytypetheory at googlegroups.com on behalf of Michael Shulman" wrote: > > However, I don't find it > arbitrary at all: *negative* types have strict eta, while positive > types don't. > > This is a very good point. However Streams are negative types but for example agda doesn't use eta conversion on them, I think for a good reason. Actually I am not completely sure whether this is undecidable. > > E.g. the following equation cannot be proven using refl (it can be proven in cubical agda btw). The corresponding equation for Sigma types holds definitionally. > > infix 5 _?_ > > record Stream (A : Set) : Set where > constructor _?_ > coinductive > field > hd : A > tl : Stream A > > open Stream > etaStream : {A : Set}{s : Stream A} ? hd s ? tl s ? s > etaStream = {!refl!} > > ?CCed to the agda list. Maybe somebody can comment on the decidabilty status? > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From b.a.w.spitters at gmail.com Sun Feb 17 15:24:56 2019 From: b.a.w.spitters at gmail.com (Bas Spitters) Date: Sun, 17 Feb 2019 15:24:56 +0100 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> Message-ID: I think Thomas is referring to M-types which can be constructed in HoTT, moreover, they have the right equality in guarded or cubical type theory. I've collected some references here. Please feel free to expand. https://ncatlab.org/nlab/show/M-type On Sun, Feb 17, 2019 at 12:44 PM Thorsten Altenkirch wrote: > > > > But function types are neither inductive nor conductive. Only N-> (-) ist > coinductive. > In presence of function types most coinductive types can be implemented. > > You think of terminal coalgebras - that is not what I mean. To avoid this confusion I am using the term codata but most people in CS understand coinductive better. You can define a type by saying how elements can be constructed, this is data Alternatively you say what you can do with it, i.e. how elements can be destructed. The function type is not data, functions are not understood by the way they are constructed but what you can do with it. A function is something you can apply to an argument and you get a result. Codata types always introduce non-trivial equalities, because all you can do with a function is applying it to arguments two functions which provide the same output for all inputs are equal. Hence functional extensionality should hold. > > Maybe coinductive is a style of programming but nothing really foundational. > > I think you miss something important here. > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > -- > You received this message because you are subscribed to the Google Groups "Homotopy Type Theory" group. > To unsubscribe from this group and stop receiving emails from it, send an email to HomotopyTypeTheory+unsubscribe at googlegroups.com. > For more options, visit https://groups.google.com/d/optout. From guillaume.allais at ens-lyon.org Sun Feb 17 16:48:02 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Sun, 17 Feb 2019 16:48:02 +0100 Subject: [Agda] Stuck on a cubical example Message-ID: Hi all, I have been playing with cubical to try to get my head around it. Reading the doc currently being written [1] has been helpful in understanding components such as hcomp, however I am now stuck and I have no idea what the problem is. Here is my silly running example. The last equation (using hcomp) is rejected: one of the side conditions is not respected. Below it is the diagram I draw to explain my reasoning. Cheers, [1] https://github.com/agda/agda/pull/3571 ===================================================== {-# OPTIONS --safe --cubical #-} module collapse where open import Cubical.Core.Prelude data Exp (A : Set) : Set where [_] : A ? Exp A _?_ : A ? Exp A ? Exp A del : ? x y ? x ? y ? y variable A : Set _++_ : (e f : Exp A) ? Exp A [ x ] ++ f = x ? f (x ? e) ++ f = x ? (e ++ f) del x y i ++ f = del x (y ++ f) i collapse : (e f : Exp A) ? e ++ f ? f collapse [ x ] f j = del x f j collapse (x ? e) f j = del x (collapse e f j) j collapse (del x y i) f j = hcomp (? k ? ? { (j = i0) ? del x (y ++ f) i ; (j = i1) ? del x (collapse y f k) k }) (del x (y ++ f) (i ? ~ j)) {- hcomp should fill in the following square: del x (y ++ f) i f ^ ^ | | refl k del x (collapse y f k) k | | | | | | del x (y ++ f) i ------------------------------> x ? (y ++ f) del x (y ++ f) (i ? ~ j) j = 0 j = 1 -} ===================================================== -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From Thorsten.Altenkirch at nottingham.ac.uk Sun Feb 17 22:41:38 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Sun, 17 Feb 2019 21:41:38 +0000 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: <20190217193613.GA676@mathematik.tu-darmstadt.de> References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> , <20190217193613.GA676@mathematik.tu-darmstadt.de> Message-ID: I tried to explain in common sense term what is a function? And my answer is that it is something you can apply to an element of the domain and you get an element of the codomain. You don?t know how you can inspect the function that is all you know. Hence the function type is explained by what you can do with it. That?s coastal. Compare this with natural numbers. A natural number is 0 or the successor of a natural number. You explain how to produce them. That?s data. What is a stream? A stream is something you can get the head and the tail of. So that is codata as well. Sent from my iPhone > On 17 Feb 2019, at 19:36, Thomas Streicher wrote: > > admittedly, by coinductive I understand terminal coalgebra > > in MLTT even function types are inductive though that's a bit of > cheating in my eyes > > so I must say I don't understand what you mean by codata types > technically > > I know positive and negative polarity in the sense of linear logic people > presumably, that'scloser to what you have in mind > > thomas This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From andersmortberg at gmail.com Mon Feb 18 04:29:53 2019 From: andersmortberg at gmail.com (Anders Mortberg) Date: Sun, 17 Feb 2019 22:29:53 -0500 Subject: [Agda] Stuck on a cubical example In-Reply-To: References: Message-ID: Hi Guillaume, The reason your solution is not working is that you're only making a line along j, while in fact you need a square depending on both i and j with the correct boundary. Whatever you write as RHS of collapse (del x y i) f j = ... must also agree with the cases of collapse when i=i0 and i=i1, so you need your solution to satisfy: collape (del x y i0) f j = collape (x :: y) f j = del x (collapse e f j) j and collapse (del x y i1) f j = del y f j I haven't tried to define collapse myself, but you will need to add (i = i0) and (i = i1) faces to the hcomp and potentially change the other faces so that it all matches up. I actually tried to explain exactly this with the "c2t_bad" example in the documentation of Cubical Agda: https://github.com/mortberg/agda/blob/cubicaldoc/doc/user-manual/language/cubical.lagda.rst#higher-inductive-types Suggestions for how to improve the explanations are very welcome! I also wish Cubical Agda would show you the constraints on the faces when you're trying to fill in this hole. At the moment I usually solve this kind of hole by figuring out what I need on paper (by evaluating the faces by hand) and then trying to fill it in, having editor support would be very cool and helpful! -- Anders Anders On Sun, Feb 17, 2019 at 10:48 AM Guillaume Allais wrote: > > Hi all, > > I have been playing with cubical to try to get my head around it. > Reading the doc currently being written [1] has been helpful in > understanding components such as hcomp, however I am now stuck > and I have no idea what the problem is. > > Here is my silly running example. The last equation (using hcomp) > is rejected: one of the side conditions is not respected. Below it > is the diagram I draw to explain my reasoning. > > Cheers, > > [1] https://github.com/agda/agda/pull/3571 > > ===================================================== > {-# OPTIONS --safe --cubical #-} > > module collapse where > > open import Cubical.Core.Prelude > > data Exp (A : Set) : Set where > [_] : A ? Exp A > _?_ : A ? Exp A ? Exp A > del : ? x y ? x ? y ? y > > variable A : Set > > _++_ : (e f : Exp A) ? Exp A > [ x ] ++ f = x ? f > (x ? e) ++ f = x ? (e ++ f) > del x y i ++ f = del x (y ++ f) i > > collapse : (e f : Exp A) ? e ++ f ? f > collapse [ x ] f j = del x f j > collapse (x ? e) f j = del x (collapse e f j) j > collapse (del x y i) f j = > hcomp (? k ? ? { (j = i0) ? del x (y ++ f) i > ; (j = i1) ? del x (collapse y f k) k > }) > (del x (y ++ f) (i ? ~ j)) > > {- > hcomp should fill in the following square: > > del x (y ++ f) i f > ^ ^ > | | > refl k del x (collapse y f k) k > | | > | | > | | > del x (y ++ f) i ------------------------------> x ? (y ++ f) > del x (y ++ f) (i ? ~ j) > > j = 0 j = 1 > > -} > ===================================================== > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From david.nowak at univ-lille.fr Tue Feb 19 18:10:40 2019 From: david.nowak at univ-lille.fr (David Nowak) Date: Tue, 19 Feb 2019 18:10:40 +0100 Subject: [Agda] ENTROPY 2019: Second Call for Papers - Co-located with EuroS&P'19 Message-ID: <2364ECC8-852C-4A07-AA9C-ED08CB1B17E7@univ-lille.fr> NEW: two more invited speakers ************************************************************************** Second Call for papers ? ENTROPY 2019 ENabling TRust through Os Proofs ? and beYond Second International workshop on the use of theorem provers for modelling and verification at the hardware-software interface https://entropy2019.sciencesconf.org Co-located with EuroS&P'19, KTH, Stockholm, June 2019 ************************************************************************** INVITED SPEAKERS Dominique Bolignano, Prove & Run Gernot Heiser, University of New South Wales Frank Piessens, KU Leuven Peter Sewell, University of Cambridge IMPORTANT DATES Paper submission: March 11 2019 Author notification: April 10, 2019 Camera-ready versions: April 22, 2019 (strict) Workshop: 16 June 2019 AIM AND SCOPE Low level software such as kernels and drivers, along with the hardware this software runs on, is critical for application security. In contrast with user applications, OS kernel software runs in privileged CPU mode and is thus highly critical. Large projects such as seL4, VeriSoft, CertiKoS and Prosper have invested considerable resources in developing formally verified systems such as hypervisors and microkernels, supplying proofs that they satisfy critical properties. Such proofs are delicate in terms of the scale and complexity of real systems, the models used in performing the proof search, and the relations between the two, which recent vulnerabilities such as Spectre and Meltdown have shown to be a highly non-trivial issue. The purpose of this workshop is to share, compare and disseminate best practices, tools and methodologies to verify OS kernels, also setting the stage for future steps in the direction of fully verified systems, dealing with issues related to modelling, model validation, and large proof maintenance through system evolution. On one hand, we need to make low-level proofs more scalable, modular and cost-effective. On the other hand, once certified systems are available, preservation and maintenance of their proofs of validity become key questions. The goal of the ENTROPY workshop is to provide a forum for researchers and practitioners in this space, linking operating systems, formal methods, and hardware architecture, interested in system design as well as machine verified mathematical proofs using proof assistants such as Coq, Isabelle and HOL4. This will be the second edition of the ENTROPY workshop series. The first workshop was organised by the Pip Development Team at University of Lille in 2018. TOPICS OF INTEREST Specific topics include, but are not limited to: * Verified kernels and hypervisors * Verified security architectures and models * Tools and frameworks for hardware security analysis * Tools and frameworks for security analysis * Formal hardware models and model validation techniques * Theorem prover based tools and frameworks for verification of low level code * Combinations of static analysis and theorem proving * Theories and techniques for compositional security analysis * Case studies and industrial experience reports * Proof maintenance techniques and problems * Compositional models and verification techniques * Proof oriented design The aim of the workshop is to stimulate innovation and active exchange of ideas, so position papers, work-in-progress and industrial experience submissions are welcome. SUBMISSION AND PUBLICATION There are two categories of submissions: 1. Regular papers describing fully developed work and complete results (10 pages, references included, IEEE format) 2. Short papers, position papers, industry experience reports, work-in-progress submissions (4 pages, references included, IEEE format) All papers should be in English and describe original work that has not been published or submitted elsewhere. The submission category should be clearly indicated. All submissions will be fully reviewed by members of the Programme Committee. Papers will appear in IEEE Xplore in a companion volume to the regular EuroS&P proceedings. For formatting and submission instructions see https://entropy2019.sciencesconf.org. PROGRAM CHAIRS Mads Dam, KTH Royal Institute of Technology David Nowak, CNRS and University of Lille PROGRAM COMMITTEE Christoph Baumann, Ericsson AB Gustavo Betarte, Univ. de la Rep?blica, Uruguay David Cock, ETH Zurich Mads Dam, KTH Royal Institute of Technology (chair) Anthony Fox, ARM Deepak Garg, MPI Saarbrucken Ronghui Gu, Columbia University Samuel Hym, Univ. Lille Thomas Jensen, INRIA and Univ. Rennes Toby Murray, Univ. Melbourne David Nowak, CNRS & Univ. Lille (chair) Vicente Sanchez-Leighton, Orange Labs Thomas Sewell, Chalmers -- David Nowak http://www.cristal.univ-lille.fr/~nowakd/ From pierre.lescanne at ens-lyon.fr Tue Feb 19 18:16:47 2019 From: pierre.lescanne at ens-lyon.fr (Pierre Lescanne (en)) Date: Tue, 19 Feb 2019 18:16:47 +0100 Subject: [Agda] inversion Message-ID: <0252388a-ae65-73a5-5b75-76f623e9dcde@ens-lyon.fr> Assuming a predicate /even/ *data even :? ? -> Set where** **? even0 : even zero** **? even1 : even (suc zero)** **? evenSS : {n : ?} -> even n -> even (suc (suc n))* I would like to prove: *inversionEven : {n : ?} -> even (suc (suc n)) -> even n* In Coq, I could use * either a command /inversion/ * or a somewhat direct proof//that applies even_ind. Are there similar features in Agda ? -- Cheers --------------------------- Pierre Lescanne (Emeritus Professor) LIP / ?cole normale sup?rieure de Lyon 46 all?e d'Italie 69364 LYON Cedex 07, France t?l: +33 6 85 70 94 31 http://perso.ens-lyon.fr/pierre.lescanne/ --------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Tue Feb 19 18:21:36 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 19 Feb 2019 18:21:36 +0100 Subject: [Agda] inversion In-Reply-To: <0252388a-ae65-73a5-5b75-76f623e9dcde@ens-lyon.fr> References: <0252388a-ae65-73a5-5b75-76f623e9dcde@ens-lyon.fr> Message-ID: Yep, Agda has such a feature: it's called dependent pattern matching. inversionEven : {n : ?} -> even (suc (suc n)) -> even n inversionEven (evenSS x) = x -- Jesper On Tue, Feb 19, 2019 at 6:17 PM Pierre Lescanne (en) < pierre.lescanne at ens-lyon.fr> wrote: > Assuming a predicate *even* > > *data even : ? -> Set where* > * even0 : even zero* > * even1 : even (suc zero)* > * evenSS : {n : ?} -> even n -> even (suc (suc n))* > > I would like to prove: > > *inversionEven : {n : ?} -> even (suc (suc n)) -> even n* > > In Coq, I could use > > - either a command *inversion* > - or a somewhat direct proof that applies even_ind. > > Are there similar features in Agda ? > > -- > Cheers > > --------------------------- > Pierre Lescanne (Emeritus Professor) > LIP / ?cole normale sup?rieure de Lyon > 46 all?e d'Italie > 69364 LYON Cedex 07, France > t?l: +33 6 85 70 94 31http://perso.ens-lyon.fr/pierre.lescanne/ > --------------------------- > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From henning at basold.eu Wed Feb 20 00:15:08 2019 From: henning at basold.eu (Henning Basold) Date: Wed, 20 Feb 2019 00:15:08 +0100 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> <20190217193613.GA676@mathematik.tu-darmstadt.de> Message-ID: <8e7dd768-3bd7-a21e-1aab-10dfd16d75b0@basold.eu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 I'd like to add my two cents: Thorsten mentioned in a previous email that function extensionality should hold because of the view on functions as coinductive type/codata. In fact, this goes down to the question what coinduction is. The category theoretical view provides one possible answer, namely that bisimilarity implies equality. Applying this to functions, bisimilarity says that two functions are point-wise equal. Thus, point-wise equality would imply equality and we obtain function extensionality from a general coinduction principle. Hagino had realised in 87 (DOI: 10.1007/3-540-18508-9_24) that many type formers can be represented as either inductive or coinductive type by appealing to their presentation as left/right adjoints. An exception to this was the function space. However, if we move to a dependent type theory (or fibred categories), then we can also obtain the function space in this way. You may find description of the category theoretical approach to this here https://arxiv.org/abs/1508.06779v2 and the syntactic side here http://arxiv.org/abs/1605.02206. (Apologies for the self-advertisement). Best, Henning On 17/02/2019 22:41, Thorsten Altenkirch wrote: > I tried to explain in common sense term what is a function? And my > answer is that it is something you can apply to an element of the > domain and you get an element of the codomain. You don?t know how > you can inspect the function that is all you know. Hence the > function type is explained by what you can do with it. That?s > coastal. Compare this with natural numbers. A natural number is 0 > or the successor of a natural number. You explain how to produce > them. That?s data. What is a stream? A stream is something you can > get the head and the tail of. So that is codata as well. > > Sent from my iPhone > >> On 17 Feb 2019, at 19:36, Thomas Streicher >> wrote: >> >> admittedly, by coinductive I understand terminal coalgebra >> >> in MLTT even function types are inductive though that's a bit of >> cheating in my eyes >> >> so I must say I don't understand what you mean by codata types >> technically >> >> I know positive and negative polarity in the sense of linear >> logic people presumably, that'scloser to what you have in mind >> >> thomas > > > > This message and any attachment are intended solely for the > addressee and may contain confidential information. If you have > received this message in error, please contact the sender and > delete the email and attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. > Email communications with the University of Nottingham may be > monitored where permitted by law. > > > > > _______________________________________________ Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlxsjfkACgkQatBsEc2x Mm4t0g/9FQEf2owWDCJ2d9uYkIv8Sv0lLihqwcxiDuu6FjhtJq256D+ClYoYzKcJ ajsauJynx2+QZR/Ogb4KORcS8CDisP7SCpnRNclaSE7BZ33Jn5ddXUjGoswjzAEC yn1272u0rZQDT7IPdJmQCjtyYIzOEqdBZnWqA/OLLv31kOqLV/pLWCC7PcJOLcX5 7LhECFG8xKWeMAU9P5uIKm3okmcvi3tTfh9LQ6UvwOFLg/HUvKpJGZstj260GAXN OKIHuB2uuvP/NwkeJT/8NyIX3ATaDPlmhBEDrt41mfKcDVtpWhlpRJi1Il84QJBN 6engBqQdJC7AEm6G0tlq+ojPsD0pAyCyHTS3QysFXce+oni0Dvo4NUB8iqHB/EKB T97x/bn9TN6gRwei6IYAO9sodaswrQBxA9uK5TQ73awIr7ncKsFGa6X6Ftf3IsW/ 0WH8cdEvviKsqG1i7OuYS3PFeS5zh9lySoHStw4N+Jt9tZOljMwRNWrESlUHuHPx ULQ2RYRhQ39UMtS2h48H5BVYyNDe14O6hGD09hzvVsLK6fJajWb6luJAfZ67YrFE Ar+rNuRHuL0mi2vrEjTyIH/9Efgw266LegHH5lXsB2b1ln6iolrkIMBVvDvtXwUR v29aVpm5RQJAyRRJl8DFM13zwl2h7CMi12W09XSENnileM9Hd7k= =+7pF -----END PGP SIGNATURE----- From streicher at mathematik.tu-darmstadt.de Sun Feb 17 12:35:04 2019 From: streicher at mathematik.tu-darmstadt.de (streicher at mathematik.tu-darmstadt.de) Date: Sun, 17 Feb 2019 12:35:04 +0100 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> Message-ID: <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> > For me the idea of inductive vs coinductive or how I called this a while > ago data vs codata is an important basic intuition which comes before > formal model constructions. Types are defined by constructors or by > destructors, eg coproducts are defined by constructors while functions are > defined by destructors, namely application. That is a function is > something you can apply to arguments obtaining a result. Lambda is a > derived construction, I can construct a function if I have a method to > compute the result. Similarily natural numbers and lists are given by > constructors, while streams are defined by destructors, to give a stream > means to be able to say what its head and its tail are. And that is > perfectly right Sigma types can be either given by a constructor or by > destructors so in this sense they are twitters. > > There are reductions which just means that certain type formers are > universal in that we can define all other from them, e.g. function types > together with some inductive types are sufficient to derive a certain > class of codata types. That doesn't mean that the dichotomy between data > and codata isn't an important basic intuition. > > ???On 17/02/2019, 09:19, "Michael Shulman" wrote: > > Well, I'm not really convinced that coinductive types should be > treated as basic type formers, rather than simply constructed out of > inductive types and extensional functions. For one thing, I have no > idea how to construct coinductive types as basic type formers in > homotopical models. I think the issue that you raise, Thorsten, could > be regarded as another argument against treating them basically, or at > least against regarding them as really "negative" in the same way that > Pis and (negative) Sigmas are. > > And as for adding random extra strict equalities pertaining certain > positive types that happen to hold in some particular model, Matt, I > would say similarly that the general perspective gives yet another > reason why you shouldn't do that. (-: > But function types are neither inductive nor conductive. Only N-> (-) ist coinductive. In presence of function types most coinductive types can be implemented. Maybe coinductive is a style of programming but nothing really foundational. Thomas From streicher at mathematik.tu-darmstadt.de Sun Feb 17 20:36:13 2019 From: streicher at mathematik.tu-darmstadt.de (Thomas Streicher) Date: Sun, 17 Feb 2019 20:36:13 +0100 Subject: [Agda] [HoTT] Re: Why do we need judgmental equality? In-Reply-To: References: <6f42d617-be71-4ce2-89e2-8c9a27c178c9@googlegroups.com> <26028d40-d53c-48d0-a889-4b57fdb77e42@googlegroups.com> <8BC255D3-D1CB-4BC3-9EDE-342233AC177C@nottingham.ac.uk> <5831E465-6CC5-476D-8C2F-43E5B0D63017@nottingham.ac.uk> <0c48660f87d8ead6d1bd2bc5e61d8b6f.squirrel@webmail.mathematik.tu-darmstadt.de> Message-ID: <20190217193613.GA676@mathematik.tu-darmstadt.de> admittedly, by coinductive I understand terminal coalgebra in MLTT even function types are inductive though that's a bit of cheating in my eyes so I must say I don't understand what you mean by codata types technically I know positive and negative polarity in the sense of linear logic people presumably, that'scloser to what you have in mind thomas From rick at rickmurphy.org Wed Feb 20 16:26:54 2019 From: rick at rickmurphy.org (rick) Date: Wed, 20 Feb 2019 10:26:54 -0500 Subject: [Agda] installing agda-master with cabal on ubuntu Message-ID: Thanks in advance. I am updating my install to agda-master using the new cabal commands. After a github clone, Cabal new-build appears to build without error ending in the following : ... /home/rick/agda-master/src/data/lib/prim/Agda/Primitive/Cubical.agda setup: filepath wildcard 'doc/user-manual.pdf' does not match any files. It creates a dist-newstyle folder with build, cache, packagedb, sdist and tmp directories. cabal new-install --lib appears to install without error ending in the following : resolving dependencies ... up to date However, cabal list --installed does not list Agda and Agda is not listed as a package under ~/.cabal/packages or ~/.cabal/lib. Do I just copy my Agda-2.6.0 directory into ~/.cabal/packages? I can execute agda interactively, etc. I'd just like to get the packaging right. -- rick From oleg.grenrus at iki.fi Thu Feb 21 11:31:43 2019 From: oleg.grenrus at iki.fi (Oleg Grenrus) Date: Thu, 21 Feb 2019 12:31:43 +0200 Subject: [Agda] installing agda-master with cabal on ubuntu In-Reply-To: References: Message-ID: <53147f83-e19d-4b56-1861-5f289a7974f0@iki.fi> Hi Rick, to install agda master locally you can simply do: ??? touch doc/user-manual.pdf ??? cabal v2-install agda agda-mode I.e. you have to generate doc/user-manual.pdf before the package is built. v2-install works by making an actual sdist tarball, and installing from the tarball (very similar to installing from Hackage: tarball is downloaded and then installed). All extra-source-files must be present, therefore also doc/user-manual.pdf That explains why v2-build works and v2-install doesn't. I don't know how to properly build doc/user-manual.pdf - but for local installing it can be left empty. - Oleg On 20.2.2019 17.26, rick wrote: > Thanks in advance. > > I am updating my install to agda-master using the new cabal commands. > > After a github clone, Cabal new-build appears to build without error > ending in the following : > > ... > /home/rick/agda-master/src/data/lib/prim/Agda/Primitive/Cubical.agda > setup: filepath wildcard 'doc/user-manual.pdf' does not match any files. > > It creates a dist-newstyle folder with build, cache, packagedb, sdist > and tmp directories. > > cabal new-install --lib appears to install without error ending in the > following : > resolving dependencies ... up to date > > However, cabal list --installed does not list Agda and Agda is not > listed as a package under ~/.cabal/packages or ~/.cabal/lib. > > Do I just copy my Agda-2.6.0 directory into ~/.cabal/packages? > > I can execute agda interactively, etc. I'd just like to get the > packaging right. > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From asr at eafit.edu.co Thu Feb 21 15:22:40 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Thu, 21 Feb 2019 14:22:40 +0000 Subject: [Agda] installing agda-master with cabal on ubuntu In-Reply-To: <53147f83-e19d-4b56-1861-5f289a7974f0@iki.fi> References: <53147f83-e19d-4b56-1861-5f289a7974f0@iki.fi> Message-ID: On Thu, 21 Feb 2019 at 05:32, Oleg Grenrus wrote: > I don't know how to properly build doc/user-manual.pdf You can use the following command $ make user-manual-pdf -- Andr?s From rick at rickmurphy.org Thu Feb 21 18:51:48 2019 From: rick at rickmurphy.org (rick) Date: Thu, 21 Feb 2019 12:51:48 -0500 Subject: [Agda] installing agda-master with cabal on ubuntu In-Reply-To: References: <53147f83-e19d-4b56-1861-5f289a7974f0@iki.fi> Message-ID: <3089e904-b819-085d-0418-3b1c59cdade7@rickmurphy.org> All set. Thanks Oleg and Andres. -- rick On 2/21/19 9:22 AM, Andres Sicard Ramirez wrote: > On Thu, 21 Feb 2019 at 05:32, Oleg Grenrus wrote: >> I don't know how to properly build doc/user-manual.pdf > You can use the following command > > $ make user-manual-pdf > -- rick From xu at math.lmu.de Fri Feb 22 11:19:36 2019 From: xu at math.lmu.de (Chuangjie Xu) Date: Fri, 22 Feb 2019 11:19:36 +0100 Subject: [Agda] 4th autumn school "Proof and Computation" Message-ID: <20190222111936.11944sg7db1qn2yg@webmail.mathematik.uni-muenchen.de> [Apologies for for multiple postings.] Autumn school "Proof and Computation" Herrsching, Germany, 20th to 26th September 2019 http://www.mathematik.uni-muenchen.de/~schwicht/pc19.php The fourth international autumn school "Proof and Computation" will be held from 20th to 26th September 2019 in Herrsching near Munich. Its aim is to bring together young researchers in the field of Foundations of Mathematics, Computer Science and Philosophy. SCOPE -------------------- - Predicative Foundations - Constructive Mathematics and Type Theory - Computation in Higher Types - Extraction of Programs from Proofs COURSES -------------------- - Ingo Blechschmidt on Generalized Spaces for Constructive Algebra - Stefania Centrone on Proof Theory - Thierry Coquand on Applications of Type Theory - Anton Freund on Dilators - Tatsuji Kawai on Concepts of Continuity - Dominique Larchey on Extraction of Programs in Coq WORKING GROUPS -------------------- There will be an opportunity to form ad-hoc groups working on specific projects, but also to discuss in more general terms the vision of constructing correct programs from proofs. APPLICATIONS -------------------- Graduate or PhD students and young postdoctoral researches are invited to apply. Applications (e.g. a self-introduction including research interests and motivation) must be accompanied by a letter of recommendation, preferably from the thesis adviser, and should be sent to Chuangjie Xu (xu at math.lmu.de). Deadline for applications: **31st May 2019**. Applicants will be notified by 28th June 2019. FINANCIAL SUPPORT -------------------- Successful applicants will be offered **full-board accommodation** for the days of the autumn school. There are NO funds, however, to reimburse travel or further expenses, which successful applicants will have to cover otherwise. The workshop is supported by the Udo Keller Stiftung (Hamburg), the CID (Computing with Infinite Data) programme of the European Commission and a JSPS core-to-core project. Klaus Mainzer Peter Schuster Helmut Schwichtenberg ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. From b.a.w.spitters at gmail.com Fri Feb 22 16:08:21 2019 From: b.a.w.spitters at gmail.com (Bas Spitters) Date: Fri, 22 Feb 2019 16:08:21 +0100 Subject: [Agda] PhD vacancy in Formally verified crypto at Aarhus Message-ID: At the Concordium blockchain research center in Aarhus http://concordium.au.dk we have a vacancy for a PhD-student on formally verified crypto. http://phd.scitech.au.dk/for-applicants/apply-here/may-2019/verifiable-cryptographic-software/ There are regularly positions at other levels too. Please contact me about this. Incidentally, from may 27 to May 29, 2019 we are organizing: WORKSHOP ON THEORY AND PRACTICE OF BLOCKCHAINS http://concordium.au.dk From Craig.McLaughlin at ed.ac.uk Sat Feb 23 14:25:45 2019 From: Craig.McLaughlin at ed.ac.uk (Craig McLaughlin) Date: Sat, 23 Feb 2019 13:25:45 +0000 Subject: [Agda] Sized Types: Run-length Encoding Example Message-ID: <3bbb2792-1c21-4294-a021-74d0772b951c@ed.ac.uk> Hi all, I am experimenting with sized types, copattern matching and (co)recursive definitions. I am trying to define a simple run-length encoding example from a paper by Di Gianantonio and Miculan [1] whose pseudo-code I reproduce below (the input Stream is an infinite sequence of 0s and 1s): z : Stream -> Stream z (0 :: s) = 0 :: z(s) z (x :: 0 :: s) = x :: 0 :: z(s) z (x :: 1 :: s) = x :: z(s), if x >= 9 z (x :: 1 :: s) = z(x + 1 :: s), otherwise My translation into Agda (v2.5.4/stdlib v0.17) is pretty naive and I am struggling to identify the correct size measure on the definition such that Agda sees that is terminating. My definition falls down in two places which I describe after presenting the code: module runlength where open import Codata.Stream open import Codata.Thunk open import Data.Nat open import Data.Nat.Properties open import Relation.Nullary open import Size mutual rlen : ? {i} ? Stream ? (? i) ? Stream ? i rlen (zero ? xs) = zero ? ? where .force ? rlen (xs .force) rlen (x ? xs) = rlen' x (xs .force) rlen' : ? {i} ? ? ? Stream ? i ? Stream ? i rlen' x (zero ? xs) = x ? ? where .force ? zero ? ? where .force ? rlen (xs .force) rlen' x (suc zero ? xs) with x ?? 9 rlen' x (suc zero ? xs) | yes p = {!!} -- x ? ? where .force ? rlen (xs .force) -- size constraints error rlen' x (suc zero ? xs) | no ?p = {!!} -- rlen (suc (suc zero) ? xs) -- "otherwise" case rlen' x (suc (suc y) ? xs) = {!!} -- "otherwise" case --- I believe, the "otherwise" case is the thorniest issue and I haven't seen anything in the literature on sized types which suggests a solution (pointers much appreciated). Additionally, the "consumption" case for x >= 9 also seems to be problematic since I do not know I can perform another observation on xs; mandated by the size constraint (\up i) in the type of rlen. Is there some trick to help Agda along? FWIW, I thought perhaps the stream processor example of Ghani, Hancock, and Pattinson [2] presented by Abel and Pientka [3] is close to what I'd need for this example but I run into the same issue with the "otherwise" case when trying to use the mixed datatype defined by SPmu and SPnu. ---- References: [1] Di Gianantonio P., Miculan M. (2003) A Unifying Approach to Recursive and Co-recursive Definitions. In: Geuvers H., Wiedijk F. (eds) Types for Proofs and Programs. TYPES 2002. Lecture Notes in Computer Science, vol 2646. Springer, Berlin, Heidelberg [2] Ghani, Neil, Hancock, Peter, & Pattinson, Dirk. (2009). Representations of stream processors using nested fixed points. Logical Meth. in Comput. Sci., 5(3:9). [3] Andreas Abel and Brigitte Pientka (2016). Well-founded recursion with copatterns and sized types. Journal of Functional Programming, 26, E2. -- Regards, Craig http://homepages.inf.ed.ac.uk/s1544843/ The University of Edinburgh is a charitable body, registered in Scotland, with registration number SC005336. From jannis at limperg.de Sun Feb 24 01:19:15 2019 From: jannis at limperg.de (Jannis Limperg) Date: Sun, 24 Feb 2019 01:19:15 +0100 Subject: [Agda] Sized Types: Run-length Encoding Example In-Reply-To: <3bbb2792-1c21-4294-a021-74d0772b951c@ed.ac.uk> References: <3bbb2792-1c21-4294-a021-74d0772b951c@ed.ac.uk> Message-ID: <6da8b913-0a4a-1d40-322d-f5a34f87cc85@limperg.de> Hej Craig, z is a mixed recursive-corecursive function, meaning that some of its recursive calls are justified by a termination argument (x gets closer to 9) and some by a productivity argument (all other cases). There are two ways to deal with such functions: A. Elementary Solution Split the implementation into two functions: 1. a recursive function which generates the first element of the output stream; 2. a corecursive function which calls the function from (1) infinitely often and conses the results. B. Library Solution For my B.Sc., I developed a library to deal with mixed recursive-corecursive functions [1]. It defines a fixpoint combinator that captures the essense of mixed recursion: You can either recurse by decreasing a well-founded relation, or corecurse 'under a constructor'. This allows an implementation that looks more or less like the pseudocode. Unfortunately, the library requires that you encode your data types as greatest fixed points of container functors, so it comes with considerable syntactic baggage. However, you could specialise the fixpoint combinator to streams (or whatever type interests you) to get rid of the incidental complexity. The library is documented only in my thesis (available in the repo), but I'll be happy to answer questions if you want to use it. Attached is an Agda file with implementations of both solutions. [1] https://github.com/JLimperg/well-founded-corecursion Cheers, Jannis -------------- next part -------------- module runlength where open import Data.Bool using (Bool ; true ; false) open import Data.List as List using (List ; [] ; _?_) open import Data.Nat using (? ; zero ; suc ; _?_ ; _?_ ; _<_ ; _ From wadler at inf.ed.ac.uk Mon Feb 25 00:31:57 2019 From: wadler at inf.ed.ac.uk (Philip Wadler) Date: Sun, 24 Feb 2019 20:31:57 -0300 Subject: [Agda] Strange bug Message-ID: I am getting a strange bug. An internal error has occurred. Please report this as a bug. > Location of the error: > src/full/Agda/TypeChecking/Serialise/Instances/Common.hs:178 Relevant source files attached. The error occurs in CoercionsS.lagda. What is the best way to report this, please? -- P . \ Philip Wadler, Professor of Theoretical Computer Science, . /\ School of Informatics, University of Edinburgh . / \ and Senior Research Fellow, IOHK . http://homepages.inf.ed.ac.uk/wadler/ -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: CoercionsS.lagda Type: application/octet-stream Size: 2453 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Types.agda Type: application/octet-stream Size: 19948 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Labels.agda Type: application/octet-stream Size: 204 bytes Desc: not available URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: not available URL: From guillaume.allais at ens-lyon.org Mon Feb 25 12:45:54 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Mon, 25 Feb 2019 12:45:54 +0100 Subject: [Agda] Strange bug In-Reply-To: References: Message-ID: <67b89280-6216-1b59-0b75-e541c830d44d@ens-lyon.org> Hi Phil, This particularly annoying bug has been fixed in 2.5.4.2: https://github.com/agda/agda/issues/3199 Cheers, -- gallais On 25/02/2019 00:31, Philip Wadler wrote: > I am getting a strange bug. > > An internal error has occurred. Please report this as a bug. >> Location of the error: >> src/full/Agda/TypeChecking/Serialise/Instances/Common.hs:178 > > > Relevant source files attached. The error occurs in CoercionsS.lagda. > > What is the best way to report this, please? -- P > > > . \ Philip Wadler, Professor of Theoretical Computer Science, > . /\ School of Informatics, University of Edinburgh > . / \ and Senior Research Fellow, IOHK > . http://homepages.inf.ed.ac.uk/wadler/ > > > The University of Edinburgh is a charitable body, registered in > Scotland, with registration number SC005336. > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From wadler at inf.ed.ac.uk Mon Feb 25 13:53:13 2019 From: wadler at inf.ed.ac.uk (Philip Wadler) Date: Mon, 25 Feb 2019 09:53:13 -0300 Subject: [Agda] Strange bug In-Reply-To: <67b89280-6216-1b59-0b75-e541c830d44d@ens-lyon.org> References: <67b89280-6216-1b59-0b75-e541c830d44d@ens-lyon.org> Message-ID: Excellent! Thank you, -- P . \ Philip Wadler, Professor of Theoretical Computer Science, . /\ School of Informatics, University of Edinburgh . / \ and Senior Research Fellow, IOHK . http://homepages.inf.ed.ac.uk/wadler/ On Mon, 25 Feb 2019 at 08:47, Guillaume Allais < guillaume.allais at ens-lyon.org> wrote: > Hi Phil, > > This particularly annoying bug has been fixed in 2.5.4.2: > https://github.com/agda/agda/issues/3199 > > Cheers, > -- > gallais > > On 25/02/2019 00:31, Philip Wadler wrote: > > I am getting a strange bug. > > > > An internal error has occurred. Please report this as a bug. > >> Location of the error: > >> src/full/Agda/TypeChecking/Serialise/Instances/Common.hs:178 > > > > > > Relevant source files attached. The error occurs in CoercionsS.lagda. > > > > What is the best way to report this, please? -- P > > > > > > . \ Philip Wadler, Professor of Theoretical Computer Science, > > . /\ School of Informatics, University of Edinburgh > > . / \ and Senior Research Fellow, IOHK > > . http://homepages.inf.ed.ac.uk/wadler/ > > > > > > The University of Edinburgh is a charitable body, registered in > > Scotland, with registration number SC005336. > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: not available URL: From jeremy.gibbons at cs.ox.ac.uk Mon Feb 25 18:38:08 2019 From: jeremy.gibbons at cs.ox.ac.uk (Jeremy Gibbons) Date: Mon, 25 Feb 2019 17:38:08 +0000 Subject: [Agda] ARRAY workshop at PLDI 2019, submissions due 8th April Message-ID: CALL FOR PAPERS ARRAY 2019 6th ACM SIGPLAN International Workshop on Libraries, Languages and Compilers for Array Programming co-located with PLDI 2019 at ACM FCRC 22nd June 2019, Phoenix, Arizona https://pldi19.sigplan.org/ ABOUT Array-oriented programming offers a unique blend of programmer productivity and high-performance parallel execution. As an abstraction, it directly mirrors high-level mathematical constructions commonly used in many fields from natural sciences over engineering to financial modelling. As a language feature, it exposes regular control flow, exhibits structured data dependencies, and lends itself to many types of program analysis. Furthermore, many modern computer architectures, particularly highly parallel architectures such as GPUs and FPGAs, lend themselves to efficiently executing array operations. This workshop is intended to bring together researchers from many different communities, including language designers, library developers, compiler researchers and practitioners who are using or working on numeric, array-centric aspects of programming languages, libraries and methodologies from all domains: imperative or declarative; object-oriented or functional; interpreted or compiled; strongly typed, weakly typed or untyped. TOPICS The ARRAY series of workshops explores: - formal semantics and design issues of array-oriented languages and libraries; - productivity and performance in compute-intensive application areas of array programming; - systematic notation for array programming, including axis- and index-based approaches; - intermediate languages, virtual machines, and program-transformation techniques for array programs; - representation of and automated reasoning about mathematical structure, such as static and dynamic sparsity, low-rank patterns, and hierarchies of these, with connections to applications such as graph processing, HPC, tensor computation and deep learning; - interfaces between array- and non-array code, including approaches for embedding array programs in general-purpose programming languages; and - efficient mapping of array programs, through compilers, libraries, and code generators, onto execution platforms, targeting multi-cores, SIMD devices, GPUs, distributed systems, and FPGA hardware, by fully automatic and user-assisted means. Array programming is at home in many communities, including language design, library development, optimization, scientific computing, and across many existing language communities. ARRAY is intended as a forum where these communities can exchange ideas on the construction of computational tools for manipulating arrays. IMPORTANT DATES Paper submissions: 8th April, 2019 (anywhere on earth) Notification of authors: 27th April, 2019 Camera-ready copies due: 10th May, 2019 Workshop date: 22nd June, 2019 SUBMISSIONS Submissions are welcome in two categories: full papers and extended abstracts. All submissions should be formatted in conformance with the ACM SIGPLAN proceedings style. Accepted submissions in either category will be presented at the workshop. Full papers may be up to 12pp, on any topic related to the focus of the workshop. They will be thoroughly reviewed according to the usual criteria of relevance, soundness, novelty, and significance; accepted submissions will be published in the ACM Digital Library. Extended abstracts may be up to 2pp; they may describe work in progress, tool demonstrations, and summaries of work published in full elsewhere. The focus of the extended abstract should be to explain why the proposed presentation will be of interest to the ARRAY audience. Submissions will be lightly reviewed only for relevance to the workshop, and will not published in the DL. Whether full papers or extended abstracts, submissions must be in PDF format, printable in black and white on US Letter sized paper. Papers must adhere to the standard SIGPLAN conference format: two columns, nine-point font on a ten-point baseline, with columns 20pc (3.33in) wide and 54pc (9in) tall, with a column gutter of 2pc (0.33in). A suitable document template for LaTeX is available at http://www.sigplan.org/Resources/Author/. Papers must be submitted using EasyChair: https://easychair.org/conferences/?conf=array2019. AUTHORS TAKE NOTE: The official publication date of full papers is the date the proceedings are made available in the ACM Digital Library. This date may be up to two weeks prior to the workshop. The official publication date affects the deadline for any patent filings related to published work. ORGANIZING COMMITTEE Jeremy Gibbons, University of Oxford, UK (chair) PROGRAMME COMMITTEE Paolo Bientinesi, Ume? University, SE Christophe Dubach, University of Edinburgh, UK Vinod Grover, NVIDIA, US Magne Haveraaen, University of Bergen, NO Troels Henriksen, University of Copenhagen, DK Tze Meng Low, Carnegie-Mellon University, US Hidehiko Masuhara, Tokyo Institute of Technology, JP Trevor L. McDonell, Utrecht University, NL Lenore Mullin, SUNY Albany, US Tatiana Shpeisman, Google Brain, US ARRAY 2018 is sponsored by ACM SIGPLAN. Student presenters of accepted submissions are eligible to apply to the SIGPLAN PAC (http://sigplan.org/PAC/) for travel funding. Jeremy.Gibbons at cs.ox.ac.uk Oxford University Department of Computer Science, Wolfson Building, Parks Road, Oxford OX1 3QD, UK. ? +44 1865 283521 http://www.cs.ox.ac.uk/people/jeremy.gibbons/ From Thorsten.Altenkirch at nottingham.ac.uk Tue Feb 26 15:55:02 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 26 Feb 2019 14:55:02 +0000 Subject: [Agda] printing infinite structures Message-ID: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> Hi, Would it be possible to have a plugin to print infinite structures like streams (as in Haskell)? I have been playing around with streams and conats for my course and it is a bit underwhelming when you can?t see them. Ok ok I can write functions which convert an initial part into a finite structure but this is a lot of extra work and not so much fin. Cheers, Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From a.g.setzer at swansea.ac.uk Tue Feb 26 16:59:12 2019 From: a.g.setzer at swansea.ac.uk (Setzer A.G.) Date: Tue, 26 Feb 2019 15:59:12 +0000 Subject: [Agda] printing infinite structures In-Reply-To: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> Message-ID: For printing infinite streams what you can do is to write using the COMPILE directive a function which when compiled prints out the infinte stream as you wish (you could postulate it as a function from Streams(String) -> IO() ) The only disadvantage is that you need to compile your code, but I when interacting with students the first thing they want to know is how to compile the code. Anton ________________________________ From: Agda on behalf of Thorsten Altenkirch Sent: 26 February 2019 14:55 To: agda list Subject: [Agda] printing infinite structures Hi, Would it be possible to have a plugin to print infinite structures like streams (as in Haskell)? I have been playing around with streams and conats for my course and it is a bit underwhelming when you can?t see them. Ok ok I can write functions which convert an initial part into a finite structure but this is a lot of extra work and not so much fin. Cheers, Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Tue Feb 26 17:08:49 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 26 Feb 2019 16:08:49 +0000 Subject: [Agda] printing infinite structures In-Reply-To: References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> Message-ID: I told them that I have no idea how to run the compiler. Which is true. T. From: "Setzer A.G." Date: Tuesday, 26 February 2019 at 15:59 To: Thorsten Altenkirch , agda list Subject: Re: printing infinite structures The only disadvantage is that you need to compile your code, but I when interacting with students the first thing they want to know is how to compile the code. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.allais at ens-lyon.org Tue Feb 26 17:34:24 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 26 Feb 2019 17:34:24 +0100 Subject: [Agda] printing infinite structures In-Reply-To: References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> Message-ID: <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> IO is coinductive so you could write `Stream String -> IO ()` in Agda itself. On 26/02/2019 17:08, Thorsten Altenkirch wrote: > I told them that I have no idea how to run the compiler. Which is true. > T. > > From: "Setzer A.G." > Date: Tuesday, 26 February 2019 at 15:59 > To: Thorsten Altenkirch , agda list > Subject: Re: printing infinite structures > > The only disadvantage is that you need to compile your code, but I when interacting with students the first thing they want to know is how to compile the code. > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From paulopizani at posteo.net Tue Feb 26 17:49:10 2019 From: paulopizani at posteo.net (Paulo Pizani) Date: Tue, 26 Feb 2019 17:49:10 +0100 Subject: [Agda] printing infinite structures In-Reply-To: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> Message-ID: <93f9ad87-03d8-9197-ee42-16ce2a9b494e@posteo.net> Wouldn't a generalized "take" function be nice for these kind of experiments? As in: > record DepthBounded (? : Set) where > field boundedType : ? ? Set > boundedTake : ? d ? ? ? boundedType d > > genTake : ? {?} ? bd : DepthBounded ? ? (d : ?) ? ? ? (bd .boundedType) d > genTake ? bd ? d = (bd .boundedTake) d > > > instance > StreamBounded : {? : Set} ? DepthBounded (Stream ?) > StreamBounded {?} = record { boundedType = Vec ?; boundedTake d = Codata.Stream.take d } > > ColistBounded : {? : Set} ? DepthBounded (Colist ?) > ColistBounded {?} = record { boundedType = BoundedVec ?; boundedTake d = Codata.Colist.take d } combined with a suitable "show" method from a "Show" class, you could then do: > shownStream = (show ? genTake) 42 (Codata.Stream.repeat whatever) > shownColist = (show ? genTake) 42 (Codata.Colist.replicate Codata.Conat.inifinity whatever) The interesting question then becomes on whether/how deriving such instances can be done with generic-programming-like techniques, maybe with a little help from reflection... But even without deriving, just the existence of the class itself (in for ex. stdlib or prelude) would create a nice expectation on users of agda coinductive types that they could rely on getting initial parts from elements of such types. -- Paulo Pizani paulopizani at posteo.net On 26-02-19 15:55, Thorsten Altenkirch wrote: > Hi, > > ? > > Would it be possible to have a plugin to print infinite structures like > streams (as in Haskell)? I have been playing around with streams and > conats for my course and it is a bit underwhelming when you can?t see > them. Ok ok I can write functions which convert an initial part into a > finite structure but this is a lot of extra work and not so much fin. > > ? > > Cheers, > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: paulopizani.vcf Type: text/x-vcard Size: 325 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: From aaron-stump at uiowa.edu Tue Feb 26 23:43:28 2019 From: aaron-stump at uiowa.edu (Aaron Stump) Date: Tue, 26 Feb 2019 16:43:28 -0600 Subject: [Agda] postdoc opportunity on Cedille project Message-ID: Dear Agda community, I am writing to advertise a postdoc position working with me at Iowa on Cedille, a constructive type theory I and my trainees have been developing the past few years. The main idea of Cedille is to use impredicative lambda-encodings with dependent elimination as the basis for inductive reasoning and dependently typed programming. This means Cedille does not have primitive datatypes, so the trusted core is very small: it can be easily checked in under 1000 lines of Haskell. Cedille is primarily implemented in Agda (hence the email to this list), with a little Haskell and a good bit of elisp. We have recently had a number of papers about encoding various forms of datatypes and recursion schemes in Cedille. There is more to study there, including codatatypes and other forms of recursion. This direction should lead to a number of further papers. There are also foundational questions like how to add extensional concepts to Cedille that warrant investigation. People recently working on the project have also found their own interesting topics to investigate. I'd be very pleased to hear from those who have recently completed or are currently finishing their doctoral studies, who might be interested. I am also open to inquiries from more established researchers. The position is available now and I have funding from a grant in hand for it through end of November 2020 (so a little under two years). Salary is competitive. Thanks, Aaron Aaron Stump Professor Computer Science The University of Iowa -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed Feb 27 11:25:48 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 27 Feb 2019 10:25:48 +0000 Subject: [Agda] printing infinite structures In-Reply-To: <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> Message-ID: <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> Can I use IO from interactive agda? How? What do you mean it is defined coinductively? Where is this described? ?On 26/02/2019, 16:35, "Guillaume Allais" wrote: IO is coinductive so you could write `Stream String -> IO ()` in Agda itself. On 26/02/2019 17:08, Thorsten Altenkirch wrote: > I told them that I have no idea how to run the compiler. Which is true. > T. > > From: "Setzer A.G." > Date: Tuesday, 26 February 2019 at 15:59 > To: Thorsten Altenkirch , agda list > Subject: Re: printing infinite structures > > The only disadvantage is that you need to compile your code, but I when interacting with students the first thing they want to know is how to compile the code. > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From henning at basold.eu Wed Feb 27 12:02:41 2019 From: henning at basold.eu (Henning Basold) Date: Wed, 27 Feb 2019 12:02:41 +0100 Subject: [Agda] printing infinite structures In-Reply-To: <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> Message-ID: <19005c77-f55f-7619-1d1e-e9bb5d2cafea@basold.eu> -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 What Guillaume refers to is the paper "Interactive Programs and Weakly Final Coalgebras in Dependent Type Theory", I suppose. However, this will not give you any printing methods, you still need to implement them yourself as commands that you evaluate later in the compilation stage. Also, since IO is implemented as cofree comonad, evaluation of elements in it will typically not terminate. Thus, in the end you will have to resort to some mechanism that cuts of evaluation again. That being said, maybe it's worthwhile to implement IO in the standard library and have a general abortion mechanism in the evaluation of compiled programs. Henning On 27/02/2019 11:25, Thorsten Altenkirch wrote: > Can I use IO from interactive agda? How? What do you mean it is > defined coinductively? Where is this described? > > ?On 26/02/2019, 16:35, "Guillaume Allais" > wrote: > > IO is coinductive so you could write `Stream String -> IO ()` in > Agda itself. > > On 26/02/2019 17:08, Thorsten Altenkirch wrote: >> I told them that I have no idea how to run the compiler. Which is >> true. T. >> >> From: "Setzer A.G." Date: Tuesday, 26 >> February 2019 at 15:59 To: Thorsten Altenkirch >> , agda list >> Subject: Re: printing infinite >> structures >> >> The only disadvantage is that you need to compile your code, but >> I when interacting with students the first thing they want to >> know is how to compile the code. >> >> >> >> >> >> This message and any attachment are intended solely for the >> addressee and may contain confidential information. If you have >> received this message in error, please contact the sender and >> delete the email and attachment. >> >> Any views or opinions expressed by the author of this email do >> not necessarily reflect the views of the University of >> Nottingham. Email communications with the University of >> Nottingham may be monitored where permitted by law. >> >> >> >> >> >> _______________________________________________ Agda mailing >> list Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > > > > > This message and any attachment are intended solely for the > addressee and may contain confidential information. If you have > received this message in error, please contact the sender and > delete the email and attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. > Email communications with the University of Nottingham may be > monitored where permitted by law. > > > > > _______________________________________________ Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlx2bk4ACgkQatBsEc2x Mm5w4A//ZLs6G8uCkw/KZBzwM9+7hFzy5anN7phKQ1hLwvM3oxYq/ckUB6X288/K WPaj8fleX0/beAk5ucqhZ4iFMKVtHJCTeBDINeGdoXwA3qVE6cjnsjQUA4HZ6q5G PL1tdMQyaoi/TBddOBeiyt+8AHiJ+Ddp5vL2BslcnuEV+VxRWTUfSYEv9RdQadjK b/x3k1jhm73/6pL2zkkZ7ujn5egxgSb+fq/ppI/4XEdd9vc8BHm4PZ1UYDMd1nP3 mVnsD3ZP5EFKqrbC0x+PxyaYZAU1cd/Dphm6AQjmO4SfH4pa6L/+j+vDDBwMxavS H1nk/AnZv3r4WXQreZQhtXHnUYee5AYPLbkFK1Rf2z1xL+mP5QtSWooMhitnQRfN u2FBS/5qaJvJA/q9M3zv8eG2nCxPz7oKEnSYXlWQ8vNHvxml8VPkWxSWm2iknJPA jpK3E2/UnMJF4KocQbVQet5aGF29+kHnXmUKD+rXlaFqDU7NiP0c0n4tm5D27hdR kKiRuU6W4t1mgW95RL/+BvVpLVS+fMNY+k0+t2yeOHyEmTyVTsu2IANs4T6yAkAv ZIwsTRc0CH7obuuTJMZEpnjLTXp6o6wN/Yh63828ysSH/xvojPUpGSURWjUxeM9H oajGfrCbaa/M+h9y3BJ7wkdefzaG41PcuhSmP5NjSKXmBJeEa6k= =FSTn -----END PGP SIGNATURE----- From Thorsten.Altenkirch at nottingham.ac.uk Wed Feb 27 12:27:46 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 27 Feb 2019 11:27:46 +0000 Subject: [Agda] printing infinite structures In-Reply-To: <19005c77-f55f-7619-1d1e-e9bb5d2cafea@basold.eu> References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> <19005c77-f55f-7619-1d1e-e9bb5d2cafea@basold.eu> Message-ID: <24D43B6C-4030-4F8B-83C0-FBF05FB61020@nottingham.ac.uk> I know this paper. Is there a coinductive implementation of IO which I can use from interactive agda? If yes where is it described? Thorsten ?On 27/02/2019, 11:03, "Agda on behalf of Henning Basold" wrote: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 What Guillaume refers to is the paper "Interactive Programs and Weakly Final Coalgebras in Dependent Type Theory", I suppose. However, this will not give you any printing methods, you still need to implement them yourself as commands that you evaluate later in the compilation stage. Also, since IO is implemented as cofree comonad, evaluation of elements in it will typically not terminate. Thus, in the end you will have to resort to some mechanism that cuts of evaluation again. That being said, maybe it's worthwhile to implement IO in the standard library and have a general abortion mechanism in the evaluation of compiled programs. Henning On 27/02/2019 11:25, Thorsten Altenkirch wrote: > Can I use IO from interactive agda? How? What do you mean it is > defined coinductively? Where is this described? > > On 26/02/2019, 16:35, "Guillaume Allais" > wrote: > > IO is coinductive so you could write `Stream String -> IO ()` in > Agda itself. > > On 26/02/2019 17:08, Thorsten Altenkirch wrote: >> I told them that I have no idea how to run the compiler. Which is >> true. T. >> >> From: "Setzer A.G." Date: Tuesday, 26 >> February 2019 at 15:59 To: Thorsten Altenkirch >> , agda list >> Subject: Re: printing infinite >> structures >> >> The only disadvantage is that you need to compile your code, but >> I when interacting with students the first thing they want to >> know is how to compile the code. >> >> >> >> >> >> This message and any attachment are intended solely for the >> addressee and may contain confidential information. If you have >> received this message in error, please contact the sender and >> delete the email and attachment. >> >> Any views or opinions expressed by the author of this email do >> not necessarily reflect the views of the University of >> Nottingham. Email communications with the University of >> Nottingham may be monitored where permitted by law. >> >> >> >> >> >> _______________________________________________ Agda mailing >> list Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > > > > > This message and any attachment are intended solely for the > addressee and may contain confidential information. If you have > received this message in error, please contact the sender and > delete the email and attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. > Email communications with the University of Nottingham may be > monitored where permitted by law. > > > > > _______________________________________________ Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlx2bk4ACgkQatBsEc2x Mm5w4A//ZLs6G8uCkw/KZBzwM9+7hFzy5anN7phKQ1hLwvM3oxYq/ckUB6X288/K WPaj8fleX0/beAk5ucqhZ4iFMKVtHJCTeBDINeGdoXwA3qVE6cjnsjQUA4HZ6q5G PL1tdMQyaoi/TBddOBeiyt+8AHiJ+Ddp5vL2BslcnuEV+VxRWTUfSYEv9RdQadjK b/x3k1jhm73/6pL2zkkZ7ujn5egxgSb+fq/ppI/4XEdd9vc8BHm4PZ1UYDMd1nP3 mVnsD3ZP5EFKqrbC0x+PxyaYZAU1cd/Dphm6AQjmO4SfH4pa6L/+j+vDDBwMxavS H1nk/AnZv3r4WXQreZQhtXHnUYee5AYPLbkFK1Rf2z1xL+mP5QtSWooMhitnQRfN u2FBS/5qaJvJA/q9M3zv8eG2nCxPz7oKEnSYXlWQ8vNHvxml8VPkWxSWm2iknJPA jpK3E2/UnMJF4KocQbVQet5aGF29+kHnXmUKD+rXlaFqDU7NiP0c0n4tm5D27hdR kKiRuU6W4t1mgW95RL/+BvVpLVS+fMNY+k0+t2yeOHyEmTyVTsu2IANs4T6yAkAv ZIwsTRc0CH7obuuTJMZEpnjLTXp6o6wN/Yh63828ysSH/xvojPUpGSURWjUxeM9H oajGfrCbaa/M+h9y3BJ7wkdefzaG41PcuhSmP5NjSKXmBJeEa6k= =FSTn -----END PGP SIGNATURE----- _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From henning at basold.eu Wed Feb 27 12:35:50 2019 From: henning at basold.eu (Henning Basold) Date: Wed, 27 Feb 2019 12:35:50 +0100 Subject: [Agda] printing infinite structures In-Reply-To: <24D43B6C-4030-4F8B-83C0-FBF05FB61020@nottingham.ac.uk> References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> <19005c77-f55f-7619-1d1e-e9bb5d2cafea@basold.eu> <24D43B6C-4030-4F8B-83C0-FBF05FB61020@nottingham.ac.uk> Message-ID: I'm only aware of the monadic apprach here: https://github.com/agda/agda-system-io/ Perhaps, Anton has something in his work on GUIs? On February 27, 2019 12:27:46 PM CET, Thorsten Altenkirch wrote: >I know this paper. Is there a coinductive implementation of IO which I >can use from interactive agda? If yes where is it described? > >Thorsten > >?On 27/02/2019, 11:03, "Agda on behalf of Henning Basold" > wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > What Guillaume refers to is the paper "Interactive Programs and Weakly > Final Coalgebras in Dependent Type Theory", I suppose. However, this > will not give you any printing methods, you still need to implement > them yourself as commands that you evaluate later in the compilation > stage. Also, since IO is implemented as cofree comonad, evaluation of > elements in it will typically not terminate. Thus, in the end you will > have to resort to some mechanism that cuts of evaluation again. > > That being said, maybe it's worthwhile to implement IO in the standard > library and have a general abortion mechanism in the evaluation of > compiled programs. > > Henning > > On 27/02/2019 11:25, Thorsten Altenkirch wrote: > > Can I use IO from interactive agda? How? What do you mean it is > > defined coinductively? Where is this described? > > > > On 26/02/2019, 16:35, "Guillaume Allais" > > wrote: > > > > IO is coinductive so you could write `Stream String -> IO ()` in > > Agda itself. > > > > On 26/02/2019 17:08, Thorsten Altenkirch wrote: > >> I told them that I have no idea how to run the compiler. Which is > >> true. T. > >> > >> From: "Setzer A.G." Date: Tuesday, 26 > >> February 2019 at 15:59 To: Thorsten Altenkirch > >> , agda list > >> Subject: Re: printing infinite > >> structures > >> > >> The only disadvantage is that you need to compile your code, but > >> I when interacting with students the first thing they want to > >> know is how to compile the code. > >> > >> > >> > >> > >> > >> This message and any attachment are intended solely for the > >> addressee and may contain confidential information. If you have > >> received this message in error, please contact the sender and > >> delete the email and attachment. > >> > >> Any views or opinions expressed by the author of this email do > >> not necessarily reflect the views of the University of > >> Nottingham. Email communications with the University of > >> Nottingham may be monitored where permitted by law. > >> > >> > >> > >> > >> > >> _______________________________________________ Agda mailing > >> list Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > >> > > > > > > > > > > > > > > This message and any attachment are intended solely for the > > addressee and may contain confidential information. If you have > > received this message in error, please contact the sender and > > delete the email and attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. > > Email communications with the University of Nottingham may be > > monitored where permitted by law. > > > > > > > > > > _______________________________________________ Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > -----BEGIN PGP SIGNATURE----- > > iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlx2bk4ACgkQatBsEc2x > Mm5w4A//ZLs6G8uCkw/KZBzwM9+7hFzy5anN7phKQ1hLwvM3oxYq/ckUB6X288/K > WPaj8fleX0/beAk5ucqhZ4iFMKVtHJCTeBDINeGdoXwA3qVE6cjnsjQUA4HZ6q5G > PL1tdMQyaoi/TBddOBeiyt+8AHiJ+Ddp5vL2BslcnuEV+VxRWTUfSYEv9RdQadjK > b/x3k1jhm73/6pL2zkkZ7ujn5egxgSb+fq/ppI/4XEdd9vc8BHm4PZ1UYDMd1nP3 > mVnsD3ZP5EFKqrbC0x+PxyaYZAU1cd/Dphm6AQjmO4SfH4pa6L/+j+vDDBwMxavS > H1nk/AnZv3r4WXQreZQhtXHnUYee5AYPLbkFK1Rf2z1xL+mP5QtSWooMhitnQRfN > u2FBS/5qaJvJA/q9M3zv8eG2nCxPz7oKEnSYXlWQ8vNHvxml8VPkWxSWm2iknJPA > jpK3E2/UnMJF4KocQbVQet5aGF29+kHnXmUKD+rXlaFqDU7NiP0c0n4tm5D27hdR > kKiRuU6W4t1mgW95RL/+BvVpLVS+fMNY+k0+t2yeOHyEmTyVTsu2IANs4T6yAkAv > ZIwsTRc0CH7obuuTJMZEpnjLTXp6o6wN/Yh63828ysSH/xvojPUpGSURWjUxeM9H > oajGfrCbaa/M+h9y3BJ7wkdefzaG41PcuhSmP5NjSKXmBJeEa6k= > =FSTn > -----END PGP SIGNATURE----- > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > > > >This message and any attachment are intended solely for the addressee >and may contain confidential information. If you have received this >message in error, please contact the sender and delete the email and >attachment. > >Any views or opinions expressed by the author of this email do not >necessarily reflect the views of the University of Nottingham. Email >communications with the University of Nottingham may be monitored >where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Wed Feb 27 13:33:03 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Wed, 27 Feb 2019 14:33:03 +0200 Subject: [Agda] printing infinite structures In-Reply-To: References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> <19005c77-f55f-7619-1d1e-e9bb5d2cafea@basold.eu> <24D43B6C-4030-4F8B-83C0-FBF05FB61020@nottingham.ac.uk> Message-ID: Could it be this? https://agda.github.io/agda-stdlib/IO.html On Wed, Feb 27, 2019 at 1:35 PM Henning Basold wrote: > I'm only aware of the monadic apprach here: > https://github.com/agda/agda-system-io/ > > Perhaps, Anton has something in his work on GUIs? > > On February 27, 2019 12:27:46 PM CET, Thorsten Altenkirch < > Thorsten.Altenkirch at nottingham.ac.uk> wrote: >> >> I know this paper. Is there a coinductive implementation of IO which I can use from interactive agda? If yes where is it described? >> >> Thorsten >> >> ?On 27/02/2019, 11:03, "Agda on behalf of Henning Basold" wrote: >> >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA512 >> >> What Guillaume refers to is the paper "Interactive Programs and Weakly >> Final Coalgebras in Dependent Type Theory", I suppose. However, this >> will not give you any printing methods, you still need to implement >> them yourself as commands that you evaluate later in the compilation >> stage. Also, since IO is implemented as cofree comonad, evaluation of >> elements in it will typically not terminate. Thus, in the end you will >> have to resort to some mechanism that cuts of evaluation again. >> >> That being said, maybe it's worthwhile to implement IO in the standard >> library and have a general abortion mechanism in the evaluation of >> compiled programs. >> >> Henning >> >> On 27/02/2019 11:25, Thorsten Altenkirch wrote: >> >>> Can I use IO from interactive agda? How? What do you mean it is >>> defined coinductively? Where is this described? >>> >>> On 26/02/2019, 16:35, "Guillaume Allais" >>> wrote: >>> >>> IO is coinductive so you could write `Stream String -> IO ()` in >>> Agda itself. >>> >>> On 26/02/2019 17:08, Thorsten Altenkirch wrote: >>> >>>> I told them that I have no idea how to run the compiler. Which is >>>> true. T. >>>> >>>> From: "Setzer A.G." Date: Tuesday, 26 >>>> February 2019 at 15:59 To: Thorsten Altenkirch >>>> , agda list >>>> Subject: Re: printing infinite >>>> structures >>>> >>>> The only disadvantage is that you need to compile your code, but >>>> I when interacting with students the first thing they want to >>>> know is how to compile the code. >>>> >>>> >>>> >>>> >>>> >>>> This message and any attachment are intended solely for the >>>> addressee and may contain confidential information. If you have >>>> received this message in error, please contact the sender and >>>> delete the email and attachment. >>>> >>>> Any views or opinions expressed by the author of this email do >>>> not necessarily reflect the views of the University of >>>> Nottingham. Email communications with the University of >>>> Nottingham may be monitored where permitted by law. >>>> >>>> >>>> >>>> >>>> >>>> _______________________________________________ Agda mailing >>>> list Agda at lists.chalmers.se >>>> https://lists.chalmers.se/mailman/listinfo/agda >>>> >>>> >>> >>> >>> >>> >>> >>> This message and any attachment are intended solely for the >>> addressee and may contain confidential information. If you have >>> received this message in error, please contact the sender and >>> delete the email and attachment. >>> >>> Any views or opinions expressed by the author of this email do not >>> necessarily reflect the views of the University of Nottingham. >>> Email communications with the University of Nottingham may be >>> monitored where permitted by law. >>> >>> >>> >>> >>> _______________________________________________ Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >>> -----BEGIN PGP SIGNATURE----- >> >> iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlx2bk4ACgkQatBsEc2x >> Mm5w4A//ZLs6G8uCkw/KZBzwM9+7hFzy5anN7phKQ1hLwvM3oxYq/ckUB6X288/K >> WPaj8fleX0/beAk5ucqhZ4iFMKVtHJCTeBDINeGdoXwA3qVE6cjnsjQUA4HZ6q5G >> PL1tdMQyaoi/TBddOBeiyt+8AHiJ+Ddp5vL2BslcnuEV+VxRWTUfSYEv9RdQadjK >> b/x3k1jhm73/6pL2zkkZ7ujn5egxgSb+fq/ppI/4XEdd9vc8BHm4PZ1UYDMd1nP3 >> mVnsD3ZP5EFKqrbC0x+PxyaYZAU1cd/Dphm6AQjmO4SfH4pa6L/+j+vDDBwMxavS >> H1nk/AnZv3r4WXQreZQhtXHnUYee5AYPLbkFK1Rf2z1xL+mP5QtSWooMhitnQRfN >> u2FBS/5qaJvJA/q9M3zv8eG2nCxPz7oKEnSYXlWQ8vNHvxml8VPkWxSWm2iknJPA >> jpK3E2/UnMJF4KocQbVQet5aGF29+kHnXmUKD+rXlaFqDU7NiP0c0n4tm5D27hdR >> kKiRuU6W4t1mgW95RL/+BvVpLVS+fMNY+k0+t2yeOHyEmTyVTsu2IANs4T6yAkAv >> ZIwsTRc0CH7obuuTJMZEpnjLTXp6o6wN/Yh63828ysSH/xvojPUpGSURWjUxeM9H >> oajGfrCbaa/M+h9y3BJ7wkdefzaG41PcuhSmP5NjSKXmBJeEa6k= >> =FSTn >> -----END PGP SIGNATURE----- >> ------------------------------ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> >> >> >> >> >> This message and any attachment are intended solely for the addressee >> and may contain confidential information. If you have received this >> message in error, please contact the sender and delete the email and >> attachment. >> >> Any views or opinions expressed by the author of this email do not >> necessarily reflect the views of the University of Nottingham. Email >> communications with the University of Nottingham may be monitored >> where permitted by law. >> >> >> >> >> _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From gallais at cs.ru.nl Wed Feb 27 16:37:03 2019 From: gallais at cs.ru.nl (Guillaume Allais) Date: Wed, 27 Feb 2019 16:37:03 +0100 Subject: [Agda] printing infinite structures In-Reply-To: References: <28009189-01FF-4A0A-85D1-2A7248AA7A95@nottingham.ac.uk> <094d2496-9466-e38e-7cda-4d23c46fbef3@ens-lyon.org> <342DA347-FA64-4727-B8E7-F6D8783B512B@nottingham.ac.uk> <19005c77-f55f-7619-1d1e-e9bb5d2cafea@basold.eu> <24D43B6C-4030-4F8B-83C0-FBF05FB61020@nottingham.ac.uk> Message-ID: <9067ca28-93d9-07a8-9f8d-33c9991c7b11@cs.ru.nl> Yes, this is what I meant: IO in the stdlib is defined as a coinductive type. Unfortunately it is currently not possible to run IO actions from inside of Agda: you need to compile your program (so you need a main) and then run it. Being able to execute them from inside Agda is currently still future work. Cheers, -- gallais On 27/02/2019 13:33, Apostolis Xekoukoulotakis wrote: > Could it be this? > > https://agda.github.io/agda-stdlib/IO.html > > On Wed, Feb 27, 2019 at 1:35 PM Henning Basold wrote: > >> I'm only aware of the monadic apprach here: >> https://github.com/agda/agda-system-io/ >> >> Perhaps, Anton has something in his work on GUIs? >> >> On February 27, 2019 12:27:46 PM CET, Thorsten Altenkirch < >> Thorsten.Altenkirch at nottingham.ac.uk> wrote: >>> >>> I know this paper. Is there a coinductive implementation of IO which I can use from interactive agda? If yes where is it described? >>> >>> Thorsten >>> >>> ?On 27/02/2019, 11:03, "Agda on behalf of Henning Basold" wrote: >>> > What Guillaume refers to is the paper "Interactive Programs and Weakly > Final Coalgebras in Dependent Type Theory", I suppose. However, this > will not give you any printing methods, you still need to implement > them yourself as commands that you evaluate later in the compilation > stage. Also, since IO is implemented as cofree comonad, evaluation of > elements in it will typically not terminate. Thus, in the end you will > have to resort to some mechanism that cuts of evaluation again. > > That being said, maybe it's worthwhile to implement IO in the standard > library and have a general abortion mechanism in the evaluation of > compiled programs. > > Henning > > On 27/02/2019 11:25, Thorsten Altenkirch wrote: > >>>>> Can I use IO from interactive agda? How? What do you mean it is >>>>> defined coinductively? Where is this described? >>>>> >>>>> On 26/02/2019, 16:35, "Guillaume Allais" >>>>> wrote: >>>>> >>>>> IO is coinductive so you could write `Stream String -> IO ()` in >>>>> Agda itself. >>>>> >>>>> On 26/02/2019 17:08, Thorsten Altenkirch wrote: >>>>> >>>>>> I told them that I have no idea how to run the compiler. Which is >>>>>> true. T. >>>>>> >>>>>> From: "Setzer A.G." Date: Tuesday, 26 >>>>>> February 2019 at 15:59 To: Thorsten Altenkirch >>>>>> , agda list >>>>>> Subject: Re: printing infinite >>>>>> structures >>>>>> >>>>>> The only disadvantage is that you need to compile your code, but >>>>>> I when interacting with students the first thing they want to >>>>>> know is how to compile the code. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> This message and any attachment are intended solely for the >>>>>> addressee and may contain confidential information. If you have >>>>>> received this message in error, please contact the sender and >>>>>> delete the email and attachment. >>>>>> >>>>>> Any views or opinions expressed by the author of this email do >>>>>> not necessarily reflect the views of the University of >>>>>> Nottingham. Email communications with the University of >>>>>> Nottingham may be monitored where permitted by law. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ Agda mailing >>>>>> list Agda at lists.chalmers.se >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >>>>>> >>>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> This message and any attachment are intended solely for the >>>>> addressee and may contain confidential information. If you have >>>>> received this message in error, please contact the sender and >>>>> delete the email and attachment. >>>>> >>>>> Any views or opinions expressed by the author of this email do not >>>>> necessarily reflect the views of the University of Nottingham. >>>>> Email communications with the University of Nottingham may be >>>>> monitored where permitted by law. >>>>> >>>>> >>>>> >>>>> >>>>> _______________________________________________ Agda mailing list >>>>> Agda at lists.chalmers.se >>>>> https://lists.chalmers.se/mailman/listinfo/agda >>>>> >>>>> >>> ------------------------------ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >>> >>> >>> >>> >>> This message and any attachment are intended solely for the addressee >>> and may contain confidential information. If you have received this >>> message in error, please contact the sender and delete the email and >>> attachment. >>> >>> Any views or opinions expressed by the author of this email do not >>> necessarily reflect the views of the University of Nottingham. Email >>> communications with the University of Nottingham may be monitored >>> where permitted by law. >>> >>> >>> >>> >>> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From diaa6510 at gmail.com Wed Feb 27 19:27:01 2019 From: diaa6510 at gmail.com (Deyaaeldeen) Date: Wed, 27 Feb 2019 13:27:01 -0500 Subject: [Agda] Sized types question Message-ID: Hi, I need help to understand why Agda wants the constraint j <= i to hold in the attached file. Thanks! Deyaa -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Failure.agda Type: application/octet-stream Size: 433 bytes Desc: not available URL: From fdhzs2010 at hotmail.com Sat Mar 2 00:47:08 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Fri, 1 Mar 2019 23:47:08 +0000 Subject: [Agda] A question on a highlighted expression in Emacs Message-ID: Hi, please consider follow program: foo : ? ? Set foo 0 = {!!} foo a = {!!} In Emacs, the third line, `foo a`, will be highlighted. I know that I can get away with this by expanding `a` to be `suc a`. However, in my real project, this expansion corresponds to 5 cases, and their proof body are exactly the same. I understand that this does not introduce any unsoundness, but I want to understand what's the reason behind this highlight, and is there any programming idiom so that I can get away with this highlight without having expand the cases here? Sincerely Yours, Jason Hu -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Sat Mar 2 01:12:43 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Sat, 2 Mar 2019 02:12:43 +0200 Subject: [Agda] A question on a highlighted expression in Emacs In-Reply-To: References: Message-ID: You can read the documentation here : https://agda.readthedocs.io/en/v2.5.4.2/language/function-definitions.html#case-trees You shouldn't expand. Check the example in the documentation to learn why the highlight is important. On Sat, Mar 2, 2019 at 1:47 AM Jason -Zhong Sheng- Hu wrote: > Hi, > > please consider follow program: > > foo : ? ? Set > foo 0 = {!!} > foo a = {!!} > > In Emacs, the third line, `foo a`, will be highlighted. I know that I can > get away with this by expanding `a` to be `suc a`. However, in my real > project, this expansion corresponds to 5 cases, and their proof body are > exactly the same. > > I understand that this does not introduce any unsoundness, but I want to > understand what's the reason behind this highlight, and is there any > programming idiom so that I can get away with this highlight without having > expand the cases here? > > > *Sincerely Yours, * > > * Jason Hu* > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Sat Mar 2 01:35:57 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sat, 2 Mar 2019 00:35:57 +0000 Subject: [Agda] A question on a highlighted expression in Emacs In-Reply-To: References: , Message-ID: i see. thank you. so it's a highlight that signifies the particular line is not definitionally convertible. Sincerely Yours, Jason Hu ________________________________ From: Apostolis Xekoukoulotakis Sent: March 1, 2019 7:12 PM To: Jason -Zhong Sheng- Hu Cc: agda at lists.chalmers.se Subject: Re: [Agda] A question on a highlighted expression in Emacs You can read the documentation here : https://agda.readthedocs.io/en/v2.5.4.2/language/function-definitions.html#case-trees You shouldn't expand. Check the example in the documentation to learn why the highlight is important. On Sat, Mar 2, 2019 at 1:47 AM Jason -Zhong Sheng- Hu > wrote: Hi, please consider follow program: foo : ? ? Set foo 0 = {!!} foo a = {!!} In Emacs, the third line, `foo a`, will be highlighted. I know that I can get away with this by expanding `a` to be `suc a`. However, in my real project, this expansion corresponds to 5 cases, and their proof body are exactly the same. I understand that this does not introduce any unsoundness, but I want to understand what's the reason behind this highlight, and is there any programming idiom so that I can get away with this highlight without having expand the cases here? Sincerely Yours, Jason Hu _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From palmgren at math.su.se Sat Mar 2 22:33:33 2019 From: palmgren at math.su.se (Erik Palmgren) Date: Sat, 2 Mar 2019 22:33:33 +0100 Subject: [Agda] =?utf-8?q?A_setoid_model_of_extensional_Martin-L=C3=B6f_t?= =?utf-8?q?ype_theory_in_Agda?= Message-ID: <7149be09-1441-875f-b27d-47bd9feaf963@math.su.se> Dear all, you may be interested in this development. It has been presented (in preliminary form) at seminars at HIM Bonn, G?teborg and Stockholm during 2018. "A setoid model of extensional Martin-L?f type theory in Agda" Erik Palmgren Abstract. We present details of an Agda formalization of a setoid model of Martin-L?f type theory with Pi, Sigma, extensional identity types, natural numbers and an infinite hiearchy of universe ? la Russell. A crucial ingredient is the use of Aczel's type V of iterative sets as an extensional universe of setoids, which allows for a well-behaved interpretation of type equality. (Not mentioned in the talks: There is also a formalized set-theoretic model of the calculus of constructions in Coq by Bruno Barras which however use classical logic.) The the following link contains the Agda development (surely in need of some cleaning up): http://staff.math.su.se/palmgren/From-type-theory-to-setoids-and-back.zip The README file should tell where to start. A write up of this is being prepared. Comments are welcome. Erik Palmgren From Thorsten.Altenkirch at nottingham.ac.uk Sun Mar 3 13:16:10 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Sun, 3 Mar 2019 12:16:10 +0000 Subject: [Agda] Strangeness with corecursion Message-ID: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> Hi, I just set the exercise to define multiplication for conats for my course on type theory. So please don?t blurt put the solution ? see the attached code. The following is not a solution because agda doesn?t see that the definition is productive (even though it is): prd? (m *? n) with prd? m prd? (m *? n) | (just pm) = prd? (n +? (pm *? n)) prd? (m *? n) | nothing = nothing but after the following change prd? (m *? n) with prd? m prd? (m *? n) | (just pm) with (pm *? n) prd? (m *? n) | (just pm) | x = prd? (n +? x) prd? (m *? n) | nothing = nothing agda seems to accept is. Actually even if +? is not contractive. Is this a known bug? Otherwise can somebody remind e how to report this? Cheers, Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: ex04-bug.agda Type: application/octet-stream Size: 1916 bytes Desc: ex04-bug.agda URL: From james.wood.100 at strath.ac.uk Sun Mar 3 14:52:17 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Sun, 3 Mar 2019 13:52:17 +0000 Subject: [Agda] Strangeness with corecursion In-Reply-To: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> References: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> Message-ID: Hi Thorsten, This looks bad! Have you tried checking the following code (with the second definition of |_*?_|)? |inf? : ?? prd? inf? = just inf? test : Is-nothing (prd? (inf? *? zero?)) test = nothing | The bug is not that the first definition is rejected; it?s that the second definition is accepted. I can?t really say why it?s accepted, though. Conat multiplication needs some other trick to make it productive. In the test case, |n| is added to itself infinitely many times. If it?s a successor, that?s okay because the consumer just gets infinitely many successors. But if it?s 0, the consumer has to wait (forever) as to whether the result is a zero or a successor. Regards, James On 03/03/2019 12:16, Thorsten Altenkirch wrote: > Hi, > > ? > > I just set the exercise to define multiplication for conats for my > course on type theory. So please don?t blurt put the solution ? see > the attached code. The following is not a solution because agda > doesn?t see that the definition is productive (even though it is): > > ? > > prd? (m *? n) with prd? m????????????????????????????????? ??????????? > > prd? (m *? n) | (just pm) = prd? (n +? (pm *? n)) > > prd? (m *? n) | nothing?? = nothing > > ? > > but after the following change > > ? > > prd? (m *? n) with prd? m???????????????????????????????????????????? > > prd? (m *? n) | (just pm) with (pm *? n) > > prd? (m *? n) | (just pm) | x = prd? (n +? x) > > prd? (m *? n) | nothing?? = nothing > > ? > > agda seems to accept is. Actually even if +? is not contractive. > > ? > > Is this a known bug? Otherwise can somebody remind e how to report this? > > ? > > Cheers, > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda ? -------------- next part -------------- An HTML attachment was scrubbed... URL: From a.g.setzer at swansea.ac.uk Sun Mar 3 14:58:30 2019 From: a.g.setzer at swansea.ac.uk (Setzer A.G.) Date: Sun, 3 Mar 2019 13:58:30 +0000 Subject: [Agda] Strangeness with corecursion In-Reply-To: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> References: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> Message-ID: Hi, what Thorsten reported is clearly a bug. I have the feeling it has a lot to do with the with construct. My definition of + is as follows, using a for me more intuitive notation (I borrowed some of the musical notation; at the end of my paper with Ulrich Berger on undecidability of codata types I discuss how the musical notation can be regarded with minor modifications as a nice abbreviation mechanism - the following definition would with such a mechanism only consist of the definition of co? and +?) record co?? : Set where coinductive field ? : co? data co? : Set where zero : co? suc : co?? ? co? _+?'_ : co?? ? co? ? co?? ? (m +?' n) = ? m +? n _+?_ : co? ? co? ? co? zero +? n = n suc m +? n = suc (m +?' n) The definition of * is not guarded recursive since in guarded recursion one cannot apply functions to the corecursive call. One can solve this by using sized types, or by unfolding the guarded recursive definition. Here one needs a function plustimes n m k which computes n + m * k Again the suggested abbreviation mechanism would avoid the need for ??' and _*??'_ : co?? ? co? ? co?? ? (m *??' n) = ? m *? n _*??_ : co? ? co? ? co? zero *?? n = zero suc m *?? n = plustimes n m n plustimes' : co?? ? co?? ? co? ? co?? ? (plustimes' n m k) = plustimes (? n) m k plustimes : co? ? co?? ? co? ? co? plustimes zero m k = ? (m *??' k) plustimes (suc n) m k = suc (plustimes' n m k) Anton ________________________________ From: Agda on behalf of Thorsten Altenkirch Sent: 03 March 2019 12:16:10 To: agda at lists.chalmers.se Subject: [Agda] Strangeness with corecursion Hi, I just set the exercise to define multiplication for conats for my course on type theory. So please don?t blurt put the solution ? see the attached code. The following is not a solution because agda doesn?t see that the definition is productive (even though it is): prd? (m *? n) with prd? m prd? (m *? n) | (just pm) = prd? (n +? (pm *? n)) prd? (m *? n) | nothing = nothing but after the following change prd? (m *? n) with prd? m prd? (m *? n) | (just pm) with (pm *? n) prd? (m *? n) | (just pm) | x = prd? (n +? x) prd? (m *? n) | nothing = nothing agda seems to accept is. Actually even if +? is not contractive. Is this a known bug? Otherwise can somebody remind e how to report this? Cheers, Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: multCoNat.agda Type: application/octet-stream Size: 1567 bytes Desc: multCoNat.agda URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: multCoNat.agda Type: application/octet-stream Size: 1570 bytes Desc: multCoNat.agda URL: From Thorsten.Altenkirch at nottingham.ac.uk Sun Mar 3 15:01:05 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Sun, 3 Mar 2019 14:01:05 +0000 Subject: [Agda] Strangeness with corecursion In-Reply-To: References: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> Message-ID: Just a reminder: please do not post solutions to connatural multiplication! I know how to do it but my students may read this mailing list. Thorsten From: "Setzer A.G." Date: Sunday, 3 March 2019 at 13:58 To: Thorsten Altenkirch , "agda at lists.chalmers.se" Subject: Re: Strangeness with corecursion Hi, what Thorsten reported is clearly a bug. I have the feeling it has a lot to do with the with construct. My definition of + is as follows, using a for me more intuitive notation (I borrowed some of the musical notation; at the end of my paper with Ulrich Berger on undecidability of codata types I discuss how the musical notation can be regarded with minor modifications as a nice abbreviation mechanism - the following definition would with such a mechanism only consist of the definition of co? and +?) record co?? : Set where coinductive field ? : co? data co? : Set where zero : co? suc : co?? ? co? _+?'_ : co?? ? co? ? co?? ? (m +?' n) = ? m +? n _+?_ : co? ? co? ? co? zero +? n = n suc m +? n = suc (m +?' n) The definition of * is not guarded recursive since in guarded recursion one cannot apply functions to the corecursive call. One can solve this by using sized types, or by unfolding the guarded recursive definition. Here one needs a function plustimes n m k which computes n + m * k Again the suggested abbreviation mechanism would avoid the need for ??' and _*??'_ : co?? ? co? ? co?? ? (m *??' n) = ? m *? n _*??_ : co? ? co? ? co? zero *?? n = zero suc m *?? n = plustimes n m n plustimes' : co?? ? co?? ? co? ? co?? ? (plustimes' n m k) = plustimes (? n) m k plustimes : co? ? co?? ? co? ? co? plustimes zero m k = ? (m *??' k) plustimes (suc n) m k = suc (plustimes' n m k) Anton ________________________________ From: Agda on behalf of Thorsten Altenkirch Sent: 03 March 2019 12:16:10 To: agda at lists.chalmers.se Subject: [Agda] Strangeness with corecursion Hi, I just set the exercise to define multiplication for conats for my course on type theory. So please don?t blurt put the solution ? see the attached code. The following is not a solution because agda doesn?t see that the definition is productive (even though it is): prd? (m *? n) with prd? m prd? (m *? n) | (just pm) = prd? (n +? (pm *? n)) prd? (m *? n) | nothing = nothing but after the following change prd? (m *? n) with prd? m prd? (m *? n) | (just pm) with (pm *? n) prd? (m *? n) | (just pm) | x = prd? (n +? x) prd? (m *? n) | nothing = nothing agda seems to accept is. Actually even if +? is not contractive. Is this a known bug? Otherwise can somebody remind e how to report this? Cheers, Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From MarkoSchuetz at web.de Mon Mar 4 14:22:34 2019 From: MarkoSchuetz at web.de (Marko Schuetz-Schmuck) Date: Mon, 04 Mar 2019 09:22:34 -0400 Subject: [Agda] arch inux packaging error? Message-ID: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> Dear All, after a recent upgrade % pacman -Qi agda Name : agda Version : 2.5.99.20190207-5 Description : A dependently typed functional programming language and proof assistant Architecture : x86_64 URL : https://wiki.portal.chalmers.se/agda/ Licenses : custom Groups : None Provides : None Depends On : ghc-libs haskell-aeson haskell-async haskell-blaze-html haskell-boxes haskell-cpphs haskell-data-hash haskell-edisoncore haskell-edit-distance haskell-equivalence haskell-geniplate-mirror haskell-gitrev haskell-hashable haskell-hashtables haskell-ieee754 haskell-murmur-hash haskell-regex-tdfa haskell-split haskell-strict haskell-unordered-containers haskell-uri-encode haskell-zlib Optional Deps : agda-stdlib: for standard library [installed] Required By : agda-stdlib Optional For : None Conflicts With : None Replaces : None Installed Size : 78.49 MiB Packager : Felix Yan Build Date : Mon 18 Feb 2019 12:04:56 PM AST Install Date : Wed 20 Feb 2019 09:07:35 AM AST Install Reason : Explicitly installed Install Script : No Validated By : Signature % pacman -Qi agda-stdlib Name : agda-stdlib Version : 0.17-1 Description : Agda standard libraries Architecture : x86_64 URL : https://github.com/agda/agda-stdlib Licenses : MIT Groups : None Provides : None Depends On : agda Optional Deps : None Required By : None Optional For : agda Conflicts With : None Replaces : None Installed Size : 38.72 MiB Packager : Felix Yan Build Date : Tue 04 Dec 2018 12:52:21 PM AST Install Date : Wed 20 Feb 2019 03:42:55 PM AST Install Reason : Explicitly installed Install Script : No Validated By : Signature when I try loading a file containing the two lines module ex01 where open import Data.Nat I get errors /usr/share/agda/lib/stdlib/Data/Nat/Base.agda:9,1-29 /usr/share/agda/lib/stdlib/Level.agdai: removeLink: permission denied (Permission denied) I contacted the packager, but have not received a response. Can someone point me to a(n easy) fix for this? Thanks and best regards, Marko -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 194 bytes Desc: not available URL: From nad at cse.gu.se Mon Mar 4 16:06:40 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 4 Mar 2019 16:06:40 +0100 Subject: [Agda] arch inux packaging error? In-Reply-To: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> References: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> Message-ID: <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> On 04/03/2019 14.22, Marko Schuetz-Schmuck wrote: > I get errors > > /usr/share/agda/lib/stdlib/Data/Nat/Base.agda:9,1-29 > /usr/share/agda/lib/stdlib/Level.agdai: removeLink: permission denied (Permission denied) My guess is that Agda has been updated, but that the interface files for the standard library have not been rebuilt using the new version of Agda. > Can someone point me to a(n easy) fix for this? Install the standard library yourself instead of using the package manager. -- /NAD From nad at cse.gu.se Mon Mar 4 16:29:06 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 4 Mar 2019 16:29:06 +0100 Subject: [Agda] Strangeness with corecursion In-Reply-To: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> References: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> Message-ID: On 03/03/2019 13.16, Thorsten Altenkirch wrote: > Otherwise can somebody remind e how to report this? The bug has been reported for you: https://github.com/agda/agda/issues/3604 -- /NAD From andreas.abel at ifi.lmu.de Mon Mar 4 17:23:05 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Mon, 4 Mar 2019 17:23:05 +0100 Subject: [Agda] Strangeness with corecursion In-Reply-To: References: <2067A3E1-C1AA-41FD-B00A-7731BA3B4E49@nottingham.ac.uk> Message-ID: The workaround it to put {-# OPTIONS --without-K #-} at the top of your file. On 2019-03-03 15:01, Thorsten Altenkirch wrote: > Just a reminder: please do not post solutions to connatural > multiplication! I know how to do it but my students may read this > mailing list. > > Thorsten > > *From: *"Setzer A.G." > *Date: *Sunday, 3 March 2019 at 13:58 > *To: *Thorsten Altenkirch , > "agda at lists.chalmers.se" > *Subject: *Re: Strangeness with corecursion > > Hi, > > what Thorsten reported is clearly a bug. > > I have the feeling it has a lot to do with the with construct. > > My definition of + is as follows, using a for me more intuitive notation > (I borrowed some of the musical notation; > > at the end of my paper with Ulrich Berger on undecidability of codata > types I discuss how the musical notation can be regarded with minor > modifications as a nice abbreviation mechanism - the following > definition would with such a mechanism only consist of the definition > of?co?and +?) > > ? record co?? : Set where > ??? coinductive > ??? field > ?: co? > > > ? data co?: Set where > ??? zero : co? > ??? suc? : co??? ? co? > > ? _+?'_ : co?? ? co?? co?? > ?(m +?' n) = ?m +? n > > ? _+?_ : co?? co?? co? > ? zero? +? n? = n > ? suc m? +? n? = suc (m +?' n) > > The definition of * is not guarded recursive since in guarded recursion > one cannot apply functions to the corecursive call. One can solve this > by using sized types, or by unfolding the guarded recursive definition. > Here one needs a function plustimes n m k ? ? which computes n + m * k > > Again the suggested abbreviation mechanism would avoid the need for ??' and > > ? _*??'_ : co?? ? co?? co?? > ?(m *??' n) = ?m *? n > > ? _*??_ : co?? co?? co? > ? zero? *?? n? = zero > ? suc m? *?? n? = plustimes n m n > > ? plustimes' : co?? ? co?? ? co?? co?? > ?(plustimes'? n m k) = plustimes (?n) m k > > ? plustimes : co?? co?? ? co?? co? > ? plustimes zero m k = ?(m *??' k) > ? plustimes (suc n) m k = suc (plustimes' n m k) > > Anton > > ------------------------------------------------------------------------ > > *From:*Agda on behalf of Thorsten > Altenkirch > *Sent:* 03 March 2019 12:16:10 > *To:* agda at lists.chalmers.se > *Subject:* [Agda] Strangeness with corecursion > > Hi, > > I just set the exercise to define multiplication for conats for my > course on type theory. So please don?t blurt put the solution ? see the > attached code. The following is not a solution because agda doesn?t see > that the definition is productive (even though it is): > > prd? (m *? n) with prd? m > > prd? (m *? n) | (just pm) = prd? (n +? (pm *? n)) > > prd? (m *? n) | nothing?? = nothing > > but after the following change > > prd? (m *? n) with prd? m > > prd? (m *? n) | (just pm) with (pm *? n) > > prd? (m *? n) | (just pm) | x = prd? (n +? x) > > prd? (m *? n) | nothing?? = nothing > > agda seems to accept is. Actually even if +? is not contractive. > > Is this a known bug? Otherwise can somebody remind e how to report this? > > Cheers, > > Thorsten > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From xqi01 at cs.tufts.edu Mon Mar 4 20:48:03 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Mon, 04 Mar 2019 14:48:03 -0500 Subject: [Agda] arch inux packaging error? In-Reply-To: <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> References: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> Message-ID: > Can someone point me to a(n easy) fix for this? Also, definitely report the issue to Arch. They are usually pretty quick to fix things. -Ray -- Xuanrui (Ray) Qi xqi01 at cs.tufts.edu me at xuanruiqi.com https://www.xuanruiqi.com On Mon, 2019-03-04 at 16:06 +0100, Nils Anders Danielsson wrote: > On 04/03/2019 14.22, Marko Schuetz-Schmuck wrote: > > I get errors > > > > /usr/share/agda/lib/stdlib/Data/Nat/Base.agda:9,1-29 > > /usr/share/agda/lib/stdlib/Level.agdai: removeLink: permission > > denied (Permission denied) > > My guess is that Agda has been updated, but that the interface files > for > the standard library have not been rebuilt using the new version of > Agda. > > > Can someone point me to a(n easy) fix for this? > > Install the standard library yourself instead of using the package > manager. > From Graham.Hutton at nottingham.ac.uk Tue Mar 5 10:56:08 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Tue, 5 Mar 2019 09:56:08 +0000 Subject: [Agda] Second call for papers, MPC 2019, Portugal Message-ID: Dear all, The next Mathematics of Program Construction (MPC) conference will be held in Portugal in October 2019, co-located with the Symposium on Formal Methods (FM). Paper submission is 3rd May 2019. Please share, and submit your best papers! Best wishes, Graham Hutton Program Chair, MPC 2019 ====================================================================== *** SECOND CALL FOR PAPERS -- MPC 2019 *** 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== TIMELINE: Abstract submission 26th April 2019 Paper submission 3rd May 2019 Author notification 14th June 2019 Camera ready copy 12th July 2019 Conference 7-9 October 2019 KEYNOTE SPEAKERS: Assia Mahboubi INRIA, France Annabelle McIver Macquarie University, Australia BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). SCOPE: MPC seeks original papers on mathematical methods and tools put to use in program construction. Topics of interest range from algorithmics to support for program construction in programming languages and systems. Typical areas include type systems, program analysis and transformation, programming language semantics, security, and program logics. The notion of a 'program' is interpreted broadly, ranging from algorithms to hardware. Theoretical contributions are welcome, provided that their relevance to program construction is clear. Reports on applications are welcome, provided that their mathematical basis is evident. We also encourage the submission of 'programming pearls' that present elegant and instructive examples of the mathematics of program construction. SUBMISSION: Submission is in two stages. Abstracts (plain text, maximum 250 words) must be submitted by 26th April 2019. Full papers (pdf, formatted using the llncs.sty style file for LaTex) must be submitted by 3rd May 2019. There is no prescribed page limit, but authors should strive for brevity. Both abstracts and papers will be submitted using EasyChair. Papers must present previously unpublished work, and not be submitted concurrently to any other publication venue. Submissions will be evaluated by the program committee according to their relevance, correctness, significance, originality, and clarity. Each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. Accepted papers must be presented in person at the conference by one of the authors. The proceedings of MPC 2019 will be published in the Lecture Notes in Computer Science (LNCS) series, as with all previous instances of the conference. Authors of accepted papers will be expected to transfer copyright to Springer for this purpose. After the conference, authors of the best papers from MPC 2019 and MPC 2015 will be invited to submit revised versions to a special issue of Science of Computer Programming (SCP). For any queries about submission please contact the program chair, Graham Hutton . PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK CONFERENE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISERS: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From MarkoSchuetz at web.de Tue Mar 5 17:08:14 2019 From: MarkoSchuetz at web.de (Marko Schuetz-Schmuck) Date: Tue, 05 Mar 2019 12:08:14 -0400 Subject: [Agda] arch inux packaging error? In-Reply-To: References: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> Message-ID: <871s3le235.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> Xuanrui Qi writes: >> Can someone point me to a(n easy) fix for this? > > Also, definitely report the issue to Arch. They are usually pretty > quick to fix things. I had done this some time before posting here. Thanks, Marko > -Ray > > -- > Xuanrui (Ray) Qi > > xqi01 at cs.tufts.edu > me at xuanruiqi.com > https://www.xuanruiqi.com > > On Mon, 2019-03-04 at 16:06 +0100, Nils Anders Danielsson wrote: >> On 04/03/2019 14.22, Marko Schuetz-Schmuck wrote: >> > I get errors >> > >> > /usr/share/agda/lib/stdlib/Data/Nat/Base.agda:9,1-29 >> > /usr/share/agda/lib/stdlib/Level.agdai: removeLink: permission >> > denied (Permission denied) >> >> My guess is that Agda has been updated, but that the interface files >> for >> the standard library have not been rebuilt using the new version of >> Agda. >> >> > Can someone point me to a(n easy) fix for this? >> >> Install the standard library yourself instead of using the package >> manager. >> > -- Prof. Dr. Marko Sch?tz-Schmuck Department of Mathematical Sciences University of Puerto Rico at Mayag?ez Mayag?ez, PR 00681 -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 194 bytes Desc: not available URL: From MarkoSchuetz at web.de Tue Mar 5 17:31:37 2019 From: MarkoSchuetz at web.de (Marko Schuetz-Schmuck) Date: Tue, 05 Mar 2019 12:31:37 -0400 Subject: [Agda] arch inux packaging error? In-Reply-To: <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> References: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> Message-ID: <87woldcmfq.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> Nils Anders Danielsson writes: > On 04/03/2019 14.22, Marko Schuetz-Schmuck wrote: >> I get errors >> >> /usr/share/agda/lib/stdlib/Data/Nat/Base.agda:9,1-29 >> /usr/share/agda/lib/stdlib/Level.agdai: removeLink: permission denied (Permission denied) > > My guess is that Agda has been updated, but that the interface files for > the standard library have not been rebuilt using the new version of > Agda. > >> Can someone point me to a(n easy) fix for this? > > Install the standard library yourself instead of using the package > manager. I did that and at least the simple test now loads. As an aside the optional step in the README.md cabal install triggers errors Resolving dependencies... Starting filemanip-0.3.6.3 Building filemanip-0.3.6.3 Failed to install filemanip-0.3.6.3 Build log ( /home/marko/.cabal/logs/ghc-8.6.3/filemanip-0.3.6.3-4gIDkmoap4z2kDIgJy5hH.log ): cabal: Entering directory '/tmp/cabal-tmp-23782/filemanip-0.3.6.3' Configuring filemanip-0.3.6.3... Preprocessing library for filemanip-0.3.6.3.. Building library for filemanip-0.3.6.3.. [1 of 4] Compiling System.FilePath.GlobPattern ( System/FilePath/GlobPattern.hs, dist/build/System/FilePath/GlobPattern.o ) System/FilePath/GlobPattern.hs:8:8: error: Could not find module ?Prelude? There are files missing in the ?base-4.12.0.0? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 8 | module System.FilePath.GlobPattern ( | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ System/FilePath/GlobPattern.hs:17:1: error: Could not find module ?Control.Arrow? There are files missing in the ?base-4.12.0.0? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 17 | import Control.Arrow (second) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ System/FilePath/GlobPattern.hs:18:1: error: Could not find module ?Control.Monad? There are files missing in the ?base-4.12.0.0? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 18 | import Control.Monad (msum) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ System/FilePath/GlobPattern.hs:19:1: error: Could not find module ?Data.Ix? There are files missing in the ?base-4.12.0.0? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 19 | import Data.Ix (Ix, inRange) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ System/FilePath/GlobPattern.hs:20:1: error: Could not find module ?Data.List? There are files missing in the ?base-4.12.0.0? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 20 | import Data.List (nub) | ^^^^^^^^^^^^^^^^^^^^^^ System/FilePath/GlobPattern.hs:21:1: error: Could not find module ?Data.Maybe? There are files missing in the ?base-4.12.0.0? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 21 | import Data.Maybe (isJust) | ^^^^^^^^^^^^^^^^^^^^^^^^^^ System/FilePath/GlobPattern.hs:22:1: error: Could not find module ?System.FilePath? There are files missing in the ?filepath-1.4.2.1? package, try running 'ghc-pkg check'. Use -v to see a list of the files searched for. | 22 | import System.FilePath (pathSeparator) | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cabal: Leaving directory '/tmp/cabal-tmp-23782/filemanip-0.3.6.3' cabal: Error: some packages failed to install: filemanip-0.3.6.3-4gIDkmoap4z2kDIgJy5hH failed during the building phase. The exception was: ExitFailure 1 lib-0.17-9iY8WpHd3atIW4l1hdJm3E depends on lib-0.17 which failed to install. Any hints on addressing these? Thanks and best regards, Marko -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 194 bytes Desc: not available URL: From aggelos.biboudis at epfl.ch Tue Mar 5 23:30:15 2019 From: aggelos.biboudis at epfl.ch (Aggelos Biboudis) Date: Tue, 5 Mar 2019 23:30:15 +0100 Subject: [Agda] SPLASH 2019: 2nd Combined Call for Contributions Message-ID: /****************************************************************************/ ACM Conference on Systems, Programming, Languages, and Applications: Software for Humanity (SPLASH'19) Athens, Greece Sun 20 - Fri 25 October 2019 https://2019.splashcon.org/ Sponsored by ACM SIGPLAN /****************************************************************************/ COMBINED CALL FOR CONTRIBUTIONS OOPSLA Onward! Workshops Dynamic Languages Symposium (DLS) Generative Programming: Concepts & Experiences (GPCE) Software Language Engineering (SLE) Managed Programming Languages and Runtimes (MPLR) /****************************************************************************/ SPLASH is the ACM SIGPLAN conference on Systems, Programming, Languages, and Applications: Software for Humanity. SPLASH embraces all aspects of software construction and delivery, to make it the premier conference on the applications of programming languages--at the intersection of programming languages and software engineering. We invite high quality submissions describing original and unpublished work. Combined Call for Contributions: * SPLASH Workshops * PACMPL Issue OOPSLA 2019 * Onward! Papers * Onward! Essays * Dynamic Languages Symposium (DLS) * Generative Programming: Concepts & Experiences (GPCE) * Software Language Engineering (SLE) * Managed Programming Languages and Runtimes (MPLR) * SPLASH-I * Posters * Doctoral Symposium * Student Research Competition * Student Volunteers ## SPLASH Workshops Following its long-standing tradition, SPLASH 2019 will host a variety of high quality workshops, allowing their participants to meet and discuss research questions with peers, to mature new and exciting ideas, and to build up communities and start new collaborations. SPLASH workshops complement the main tracks of the conference and provide meetings in a smaller and more specialized setting. Workshops cultivate new ideas and concepts for the future, optionally recorded in formal proceedings. Submissions are currently being accepted on a rolling basis. The rolling call will close on Fri 15 Mar, 2019. https://2019.splashcon.org/track/splash-2019-workshops ## PACMPL Issue OOPSLA 2019 Papers may target any stage of software development, including requirements, modeling, prototyping, design, implementation, generation, analysis, verification, testing, evaluation, maintenance, and reuse of software systems. Contributions may include the development of new tools (such as language front-ends, program analyses, and runtime systems), new techniques (such as methodologies, design processes, and code organization approaches), new principles (such as formalisms, proofs, models, and paradigms), and new evaluations (such as experiments, corpora analyses, user studies, and surveys). Submissions due: Fri 5 Apr, 2019 https://2019.splashcon.org/track/splash-2019-oopsla ## Onward! Papers Onward! is a premier multidisciplinary conference focused on everything to do with programming and software: including processes, methods, languages, communities, and applications. Onward! is more radical, more visionary, and more open than other conferences to ideas that are well-argued but not yet proven. We welcome different ways of thinking about, approaching, and reporting on programming language and software engineering research. Submissions due: Mon 22 April, 2019 https://2019.onward-conference.org/track/onward-2019-papers (transitioning to https://2019.splashcon.org/track/splash-2019-Onward-papers) ## Onward! Essays Onward! Essays is looking for clear and compelling pieces of writing about topics important to the software community. An essay can be long or short. An essay can be an exploration of the topic and its impact, or a story about the circumstances of its creation; it can present a personal view of what is, explore a terrain, or lead the reader in an act of discovery; it can be a philosophical digression or a deep analysis. It can describe a personal journey, perhaps the one the author took to reach an understanding of the topic. The subject area?software, programming, and programming languages?should be interpreted broadly and can include the relationship of software to human endeavors, or its philosophical, sociological, psychological, historical, or anthropological underpinnings. Submissions due: Mon 22 April, 2019 https://2019.onward-conference.org/track/onward-2019-Onward-Essays (transitioning to https://2019.splashcon.org/track/splash-2019-Onward-Essays) ## Dynamic Languages Symposium (DLS) Dynamic Languages, from Lisp, Snobol, and Smalltalk to Python, Racket, and Javascript, have been playing a fundamental role both in programming research and practice. DLS is the premier forum for researchers and practitioners to share research and experience on all aspects of Dynamic Languages. DLS invites high quality papers reporting original research and experience related to the design, implementation, and applications of dynamic languages. Abstracts due: Wed 29 May, 2019 Submissions due: Wed 5 Jun, 2019 https://conf.researchr.org/home/dls-2019 ## Generative Programming: Concepts & Experiences (GPCE) The International Conference on Generative Programming: Concepts & Experience (GPCE) is a venue for researchers and practitioners interested in techniques and tools for code generation, language implementation, and metaprogramming. GPCE seeks conceptual, theoretical, empirical, and technical contributions to its topics of interest, which include but are not limited to (i) program transformation, staging, macro systems, preprocessors, program synthesis, and code-recommendation systems, (ii) domain-specific languages, language embedding, language design, and language workbenches, (iii) feature-oriented programming, domain engineering, and feature interactions, (iv) applications and properties of code generation, language implementation, and product-line development. Abstracts due: Fri 14 Jun, 2019 Submissions due: Fri 21 Jun, 2019 https://conf.researchr.org/home/gpce-2019 ## Software Language Engineering (SLE) Software Language Engineering (SLE) is the discipline of engineering languages and their tools required for the creation of software. It abstracts from the differences between programming languages, modelling languages, and other software languages, and emphasizes the engineering facet of the creation of such languages, that is, the establishment of the scientific methods and practices that enable the best results. SLE 2019 solicits high quality contributions in areas ranging from theoretical and conceptual contributions, to tools, techniques, and frameworks in the domain of software language engineering. Abstracts due: Fri 14 Jun, 2019 Submissions due: Fri 21 Jun, 2019 https://conf.researchr.org/home/sle-2019 ## Managed Programming Languages and Runtimes (MPLR) The International Conference on Managed Programming Languages & Runtimes (MPLR, formerly ManLang) is a premier forum for presenting and discussing novel results in all aspects of managed programming languages and runtime systems, which serve as building blocks for some of the most important computing systems around, ranging from small-scale (embedded and real-time systems) to large-scale (cloud-computing and big-data platforms) and anything in between (mobile, IoT, and wearable applications). Submissions due: Mon July 8, 2019 https://conf.researchr.org/home/mplr-2019 ## SPLASH-I SPLASH-I is a series of high-quality talks that highlight the challenges that are on the forefront of both research and practice across the SPLASH community's broad spectrum of domains and techniques. We invite the community to propose speakers (including themselves) through our call for contributions. Submissions due: Fri May 17, 2019 https://2019.splashcon.org/track/splash-2019-SPLASH-I ## Posters The SPLASH Poster track provides an excellent forum for authors to present their recent or ongoing projects in an interactive setting, and receive feedback from the community. We invite submissions covering any aspect of programming, systems, languages and applications. The goal of the poster session is to encourage and facilitate small groups of individuals interested in a technical area to gather and interact at any desired level of detail. The poster session is held early in the conference to promote continued discussion among interested parties. Submissions due: Sat 7 Sep, 2019 https://2019.splashcon.org/track/splash-2019-Posters ## Doctoral Symposium The SPLASH Doctoral Symposium provides students with useful guidance for completing their dissertation research and beginning their research careers. The symposium will provide an interactive forum for doctoral students who have progressed far enough in their research to have a structured proposal, but will not be defending their dissertation in the next 12 months. This year, the John Vlissides Award will be presented to a symposium participant showing significant promise in applied software research. All participants to the Doctoral Symposium are eligible. The award includes a prize of $2,000. Submissions due: Fri 12 Jul, 2019 http://2019.splashcon.org/track/splash-2019-Doctoral-Symposium ## Student Research Competition The ACM Student Research Competition (SRC), sponsored by Microsoft Research, offers a unique forum for ACM student members at the undergraduate and graduate levels to present their original research at SPLASH before a panel of judges and conference attendees. The SRC gives visibility to not only up-and-coming young researchers, but also exposes them to the field of computer science research and its community. This competition also gives students an opportunity to discuss their research with experts in their field, get feedback, and to help them sharpen their communication and networking skills. Student Research Competition abstract due: Fri July 12, 2019 https://2019.splashcon.org/track/splash-2019-SRC ## Student Volunteers The SPLASH Student Volunteers program provides an opportunity for students from around the world to associate with some of the leading personalities in industry and research in the following areas: programming languages, object-oriented technology and software development. Student volunteers contribute to the smooth running of the conference by performing tasks such as: assisting with registration, providing information about the conference to attendees, assisting session organizers and monitoring sessions. Detailed information on how to apply will be available on the main conference page in March 2019. Estimated deadline for the SV applications will be towards the end of September 2019. https://2019.splashcon.org/track/splash-2019-Student-Volunteers ## Information Contact: publicity at splashcon.org Website: https://2019.splashcon.org/ Location: Royal Olympic Hotel, Athens, Greece ## Organization SPLASH General Chair: * Yannis Smaragdakis (University of Athens) OOPSLA Review Committee Chair: * Eelco Visser (Delft University of Technology) Onward! Papers Chair: * Hidehiko Masuhara (Tokyo Institute of Technology) Onward! Essays Chair: * Tomas Petricek (Alan Turing Institute) DLS Program Chair: * Stefan Marr (University of Kent) GPCE General Chair: * Ina Schaefer (Technische Universit?t Braunschweig) GPCE Program Chair: * Tijs van der Storm (Centrum Wiskunde & Informatica / University of Groningen) SLE General Chair: * Oscar Nierstrasz (University of Bern) SLE Program Co-Chairs: * Bruno Oliveira (University of Hong Kong) * Jeff Gray (University of Alabama) SLE Publicity Chair: * Andrei Chi? (Feenk GmbH, Switzerland) SLE AEC Co-Chairs: * Emma S?derberg (Lund University) * Abel Gomez (Universitat Oberta de Catalunya) MPLR General Chair: * Tony Hosking (Australian National University / Data61) MPLR Program Chair: * Irene Finocchi (Sapienza University of Rome) SPLASH-I Co-Chairs: * Shan Shan Huang (Facebook) * Michael Carbin (MIT) Workshops Co-Chairs: * Arjun Guha (University of Massachusetts Amherst) * Neville Grech (University of Athens, University of Malta) OOPSLA Artifact Evaluation Co-Chairs: * Colin S. Gordon (Drexel University) * Jan Vitek (Northeastern University) Posters Chair: * Christoph Reichenbach (Lund University) Doctoral Symposium Chair: * ?ric Tanter (University of Chile & Inria Paris) Student Research Competition Co-Chairs: * Jay McCarthy (University of Massachusetts Lowell) * David Darais (University of Vermont) Student Volunteers Co-Chairs: * Juliana Franco (Microsoft Research, Cambridge) * Tony Antoniadis (University of Athens) Publications Chair: * Magnus Madsen (Aarhus University) Publicity Co-Chairs: * Aggelos Biboudis (?cole Polytechnique F?d?rale de Lausanne) * Tijs van der Storm (Centrum Wiskunde & Informatica / University of Groningen) Local Arrangements Chair: * George Fourtounis (University of Athens) Accessibility Chair: * Kostas Saidis (University of Athens) Sponsorships Co-Chairs: * Caitlin Sadowski (Google) * Jaeheon Yi (Google) Video Chair: * Benjamin Chung (Northeastern University) Web Co-Chairs: * Aggelos Biboudis (?cole Polytechnique F?d?rale de Lausanne) * Aviral Goel (Northeastern University) /****************************************************************************/ From guillaume.allais at ens-lyon.org Wed Mar 6 17:38:47 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Wed, 6 Mar 2019 17:38:47 +0100 Subject: [Agda] Stuck on a cubical example In-Reply-To: References: Message-ID: Thanks Anders, I have spent some more time working on my example following your advice and managed to come up with a solution (in the end there was no need to use hcomp). Now that the cubical doc has been made available on readthedocs, I have uploaded a little write-up explaining the solution & discussing why these constraints are necessary. Hopefully I haven't said too many stupid things. https://gallais.github.io/blog/first-cubical-experiment Cheers, -- gallais On 18/02/2019 04:29, Anders Mortberg wrote: > Hi Guillaume, > > The reason your solution is not working is that you're only making a > line along j, while in fact you need a square depending on both i and > j with the correct boundary. Whatever you write as RHS of > > collapse (del x y i) f j = ... > > must also agree with the cases of collapse when i=i0 and i=i1, so you > need your solution to satisfy: > > collape (del x y i0) f j = collape (x :: y) f j = del x (collapse e f j) j > > and > > collapse (del x y i1) f j = del y f j > > I haven't tried to define collapse myself, but you will need to add (i > = i0) and (i = i1) faces to the hcomp and potentially change the other > faces so that it all matches up. I actually tried to explain exactly > this with the "c2t_bad" example in the documentation of Cubical Agda: > > https://github.com/mortberg/agda/blob/cubicaldoc/doc/user-manual/language/cubical.lagda.rst#higher-inductive-types > > Suggestions for how to improve the explanations are very welcome! > > > I also wish Cubical Agda would show you the constraints on the faces > when you're trying to fill in this hole. At the moment I usually solve > this kind of hole by figuring out what I need on paper (by evaluating > the faces by hand) and then trying to fill it in, having editor > support would be very cool and helpful! > > -- > Anders > > > Anders > On Sun, Feb 17, 2019 at 10:48 AM Guillaume Allais > wrote: >> Hi all, >> >> I have been playing with cubical to try to get my head around it. >> Reading the doc currently being written [1] has been helpful in >> understanding components such as hcomp, however I am now stuck >> and I have no idea what the problem is. >> >> Here is my silly running example. The last equation (using hcomp) >> is rejected: one of the side conditions is not respected. Below it >> is the diagram I draw to explain my reasoning. >> >> Cheers, >> >> [1] https://github.com/agda/agda/pull/3571 >> >> ===================================================== >> {-# OPTIONS --safe --cubical #-} >> >> module collapse where >> >> open import Cubical.Core.Prelude >> >> data Exp (A : Set) : Set where >> [_] : A ? Exp A >> _?_ : A ? Exp A ? Exp A >> del : ? x y ? x ? y ? y >> >> variable A : Set >> >> _++_ : (e f : Exp A) ? Exp A >> [ x ] ++ f = x ? f >> (x ? e) ++ f = x ? (e ++ f) >> del x y i ++ f = del x (y ++ f) i >> >> collapse : (e f : Exp A) ? e ++ f ? f >> collapse [ x ] f j = del x f j >> collapse (x ? e) f j = del x (collapse e f j) j >> collapse (del x y i) f j = >> hcomp (? k ? ? { (j = i0) ? del x (y ++ f) i >> ; (j = i1) ? del x (collapse y f k) k >> }) >> (del x (y ++ f) (i ? ~ j)) >> >> {- >> hcomp should fill in the following square: >> >> del x (y ++ f) i f >> ^ ^ >> | | >> refl k del x (collapse y f k) k >> | | >> | | >> | | >> del x (y ++ f) i ------------------------------> x ? (y ++ f) >> del x (y ++ f) (i ? ~ j) >> >> j = 0 j = 1 >> >> -} >> ===================================================== >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From 33dbqnxpy7if at gmail.com Wed Mar 6 19:22:18 2019 From: 33dbqnxpy7if at gmail.com (Serge Leblanc) Date: Wed, 6 Mar 2019 19:22:18 +0100 Subject: [Agda] Why unification fail? Message-ID: Hi every, Would anyone please tell me why the unification fails in the following example and what I do to succeed? Thank you for your help. Saluton ?iun, ?u iu bonvolus indiki al mi la kialon pro la unui?o fiaskas en la sekva ekzemplo kaj kion mi faru por sukcesi?? Sinceran dankon pro via helpo. -- Serge Leblanc ------------------------------------------------------------------------ gpg --search-keys 0x67B17A3F Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- module Chomp1 where open import Data.Nat --as ? open import Data.Nat.Properties --open import Function using (id ; _?_) open import Relation.Binary.PropositionalEquality as PropEq using (_?_ ; refl) -- ; _?_ ; refl ; sym ; trans ; cong ; cong? ; cong-app) open PropEq.?-Reasoning infixr 15 _?_ data ?? : Set where [_] : (o : ?) ? ?? _?_ : (x : ?) ? (xs : ??) ? ?? head : ?? ? ? head [ o ] = o head (h ? _) = h ? : ?? ? ? ? [ o ] = o ? (h ? t) = h + ? t proof? : ? n ? ? [ n ] ? n proof? n = refl proof? : ? (3 ? 2 ? [ 5 ]) ? 10 proof? = refl l? = 3 ? 2 ? [ 4 ] ? : (i : ?) ? (l : ??) ? Ordering i (? l) ? i l = compare i (? l) private proof? : ? 3 l? ? less 3 5 proof? = refl proof? : ? 9 l? ? equal 9 proof? = refl proof? : ? 11 l? ? greater 9 1 proof? = refl ? : ? ? ?? ? ?? ? i l with compare i (? l) ... | less m k = {! !} ... | equal m = l ... | greater m k = suc k ? l -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 228 bytes Desc: OpenPGP digital signature URL: From andersmortberg at gmail.com Wed Mar 6 19:31:24 2019 From: andersmortberg at gmail.com (Anders Mortberg) Date: Wed, 6 Mar 2019 13:31:24 -0500 Subject: [Agda] Stuck on a cubical example In-Reply-To: References: Message-ID: Very nice and pedagogic post Guillaume! Maybe a link should be added to the documentation so that beginners easily can find it? I think having such a detailed presentation of what needs to be satisfied for functions on HITs to be well-defined could be very helpful. The documentation is a bit terse about this at the moment. -- Anders On Wed, Mar 6, 2019 at 11:38 AM Guillaume Allais wrote: > > Thanks Anders, > > I have spent some more time working on my example following your advice > and managed to come up with a solution (in the end there was no need to > use hcomp). > > Now that the cubical doc has been made available on readthedocs, I have > uploaded a little write-up explaining the solution & discussing why these > constraints are necessary. Hopefully I haven't said too many stupid things. > https://gallais.github.io/blog/first-cubical-experiment > > Cheers, > -- > gallais > > On 18/02/2019 04:29, Anders Mortberg wrote: > > Hi Guillaume, > > > > The reason your solution is not working is that you're only making a > > line along j, while in fact you need a square depending on both i and > > j with the correct boundary. Whatever you write as RHS of > > > > collapse (del x y i) f j = ... > > > > must also agree with the cases of collapse when i=i0 and i=i1, so you > > need your solution to satisfy: > > > > collape (del x y i0) f j = collape (x :: y) f j = del x (collapse e f j) j > > > > and > > > > collapse (del x y i1) f j = del y f j > > > > I haven't tried to define collapse myself, but you will need to add (i > > = i0) and (i = i1) faces to the hcomp and potentially change the other > > faces so that it all matches up. I actually tried to explain exactly > > this with the "c2t_bad" example in the documentation of Cubical Agda: > > > > https://github.com/mortberg/agda/blob/cubicaldoc/doc/user-manual/language/cubical.lagda.rst#higher-inductive-types > > > > Suggestions for how to improve the explanations are very welcome! > > > > > > I also wish Cubical Agda would show you the constraints on the faces > > when you're trying to fill in this hole. At the moment I usually solve > > this kind of hole by figuring out what I need on paper (by evaluating > > the faces by hand) and then trying to fill it in, having editor > > support would be very cool and helpful! > > > > -- > > Anders > > > > > > Anders > > On Sun, Feb 17, 2019 at 10:48 AM Guillaume Allais > > wrote: > >> Hi all, > >> > >> I have been playing with cubical to try to get my head around it. > >> Reading the doc currently being written [1] has been helpful in > >> understanding components such as hcomp, however I am now stuck > >> and I have no idea what the problem is. > >> > >> Here is my silly running example. The last equation (using hcomp) > >> is rejected: one of the side conditions is not respected. Below it > >> is the diagram I draw to explain my reasoning. > >> > >> Cheers, > >> > >> [1] https://github.com/agda/agda/pull/3571 > >> > >> ===================================================== > >> {-# OPTIONS --safe --cubical #-} > >> > >> module collapse where > >> > >> open import Cubical.Core.Prelude > >> > >> data Exp (A : Set) : Set where > >> [_] : A ? Exp A > >> _?_ : A ? Exp A ? Exp A > >> del : ? x y ? x ? y ? y > >> > >> variable A : Set > >> > >> _++_ : (e f : Exp A) ? Exp A > >> [ x ] ++ f = x ? f > >> (x ? e) ++ f = x ? (e ++ f) > >> del x y i ++ f = del x (y ++ f) i > >> > >> collapse : (e f : Exp A) ? e ++ f ? f > >> collapse [ x ] f j = del x f j > >> collapse (x ? e) f j = del x (collapse e f j) j > >> collapse (del x y i) f j = > >> hcomp (? k ? ? { (j = i0) ? del x (y ++ f) i > >> ; (j = i1) ? del x (collapse y f k) k > >> }) > >> (del x (y ++ f) (i ? ~ j)) > >> > >> {- > >> hcomp should fill in the following square: > >> > >> del x (y ++ f) i f > >> ^ ^ > >> | | > >> refl k del x (collapse y f k) k > >> | | > >> | | > >> | | > >> del x (y ++ f) i ------------------------------> x ? (y ++ f) > >> del x (y ++ f) (i ? ~ j) > >> > >> j = 0 j = 1 > >> > >> -} > >> ===================================================== > >> > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > > From guillaume.allais at ens-lyon.org Wed Mar 6 20:46:35 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Wed, 6 Mar 2019 20:46:35 +0100 Subject: [Agda] Why unification fail? In-Reply-To: References: Message-ID: <023a2756-c22f-148b-101f-de09b3db17c8@ens-lyon.org> Hi Serge, The issue comes from the fact that this case forces Agda to consider a problem of the form `f x =? c y` where `f` is a function and `c` a constructor. For Agda to be able to solve this type of problem, it would have to somehow invert `f`. Needless to say this is impossible in the general case. The typical solution to this kind of issue is to abstract over `f x` at the same time as you are computing the indexed value which will mention it. This way the unification problem is `fx =? c y` where `fx` is a variable (the name you gave to the value `f x` corresponds to). This vastly simpler unification problem can be easily solved by Agda. And indeed the following works fine: ======================================= ? : ? ? ?? ? ?? ? i l with ? l | compare i (? l) ... | ?l | less m k = {! !} ... | ?l | equal m = l ... | ?l | greater m k = suc k ? l ======================================= If you need Agda to remember the connection between the intermediate result `?l` and the function call `? l`, you can use the inspect idiom. I have written a bit of doc for it two weeks ago: https://github.com/agda/agda-stdlib/blob/8594b26dd817ffbf9024310521c9e79d9f199603/README/Inspect.agda Cheers, -- gallais On 06/03/2019 19:22, Serge Leblanc wrote: > Hi every, > > Would anyone please tell me why the unification fails in the following > example and what I do to succeed? > > Thank you for your help. > > Saluton ?iun, > > ?u iu bonvolus indiki al mi la kialon pro la unui?o fiaskas en la sekva > ekzemplo kaj kion mi faru por sukcesi?? > > Sinceran dankon pro via helpo. > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From kahl at cas.mcmaster.ca Wed Mar 6 22:02:27 2019 From: kahl at cas.mcmaster.ca (Wolfram Kahl) Date: Wed, 6 Mar 2019 16:02:27 -0500 Subject: [Agda] Stuck on a cubical example In-Reply-To: References: Message-ID: <20190306210227.GA9911@ritchie.cas.mcmaster.ca> Hi Guillaume, > https://gallais.github.io/blog/first-cubical-experiment Nice, thanks! I just find it confusing that you refer to ``0'' and ``1'', while the cubical Agda documentation appears to make it clear that in Agda these are called ``i0'' and ``i1''. (I am consciously staying a cubical outsider who, as Agda user, wants to see what cubical Agda has to offer. I am therefore especially interested in documentation that assumes familiarity with Agda, but no familiarity with cubical type theory. (I guess there are (still) more Agda users than cubical insiders... ;-) ) Your ``del'' is, IMO, not very convincing: Why would I want to have a list type where all lists are equal? (And why don't you even explain that?) An actual application could possibly be had by constructing multisets via: swap : ? x y e ? x ? y ? e ? y ? x ? e Or am I missing something? ) Wolfram From nad at cse.gu.se Wed Mar 6 22:29:32 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 6 Mar 2019 22:29:32 +0100 Subject: [Agda] arch inux packaging error? In-Reply-To: <87woldcmfq.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> References: <87a7iaeput.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> <89f1c8b2-9537-1f92-4985-90f1d8560547@cse.gu.se> <87woldcmfq.fsf@tpad-m.i-did-not-set--mail-host-address--so-tickle-me> Message-ID: <481cd1e0-f402-b5ec-d39f-84c5c483ef0a@cse.gu.se> On 05/03/2019 17.31, Marko Schuetz-Schmuck wrote: > System/FilePath/GlobPattern.hs:8:8: error: > Could not find module ?Prelude? > There are files missing in the ?base-4.12.0.0? package, > try running 'ghc-pkg check'. > Any hints on addressing these? It sounds to me as if your installation of GHC/the Haskell Platform/whatever it was that you installed is rather broken. You could try running "ghc-pkg check" to get more information. -- /NAD From guillaume.allais at ens-lyon.org Wed Mar 6 23:28:40 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Wed, 6 Mar 2019 23:28:40 +0100 Subject: [Agda] Stuck on a cubical example In-Reply-To: <20190306210227.GA9911@ritchie.cas.mcmaster.ca> References: <20190306210227.GA9911@ritchie.cas.mcmaster.ca> Message-ID: <29ad8601-990b-8b87-0f1e-f35b8acf0ed8@ens-lyon.org> Hi Wolfram, I have updated the post to change 0/1 to i0/i1. Thanks for the suggestion. I agree that this datatype is useless. This started as an attempt to make the example as simple as possible and as I mention in the conclusion it still took me a lot of time to figure out to prove the more complex result. Tonight I have experimented a bit with a list + swap (with and without an additional path for truncation). Thanks to the List? experiment, I now understand enough to quickly define _++_ and prove a right identity & an associativity lemma but `swaps : ? x xs ? x ? xs ? xs ++ x ? []` still escapes me. Lessons learned with the List? experiment are evidently not enough to tackle interesting problems. But they're a start. Cheers, -- gallais On 06/03/2019 22:02, Wolfram Kahl wrote: > Hi Guillaume, > >> https://gallais.github.io/blog/first-cubical-experiment > Nice, thanks! > > I just find it confusing that you refer to ``0'' and ``1'', > while the cubical Agda documentation appears to make it clear > that in Agda these are called ``i0'' and ``i1''. > > (I am consciously staying a cubical outsider who, as Agda user, > wants to see what cubical Agda has to offer. > I am therefore especially interested in documentation > that assumes familiarity with Agda, but no familiarity > with cubical type theory. > (I guess there are (still) more Agda users > than cubical insiders... ;-) > ) > > Your ``del'' is, IMO, not very convincing: > Why would I want to have a list type where all lists are equal? > (And why don't you even explain that?) > > An actual application could possibly be had by constructing > multisets via: > > swap : ? x y e ? x ? y ? e ? y ? x ? e > > Or am I missing something? > ) > > > Wolfram > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From nad at cse.gu.se Thu Mar 7 15:53:54 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 7 Mar 2019 15:53:54 +0100 Subject: [Agda] Try It Online Message-ID: <3d2ffb9e-1bab-5399-0213-43f985d64c68@cse.gu.se> Hi, I noticed today that there is a web service called "Try It Online" that allows one to try out code written in many languages, including Agda: https://tio.run/#agda Apparently Agda is classified as "practical" rather than "recreational". :) -- /NAD From mechvel at botik.ru Fri Mar 8 16:00:00 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 08 Mar 2019 18:00:00 +0300 Subject: [Agda] algebra hierarchy in library Message-ID: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> Dear standard library developers and supporters, can you please answer in (simple words) several questions about the representation of the algebraic hierarchy in standard library? 1. Why `Raw' structures? There are classical generic algebraic structures (call them GAS): Magma, Semigroup, Monoid, and so on. Those of them having some new field respectively to previous structures are accompanied with the corresponding `Raw' record. For example, Magma is preceded with RawMagma, Monoid with RawMonoid. Each `Raw' structure expresses only the signature of the corresponding GAS. What the `Raw' structures serve for? 2. Why putting `Is' structures into a different file? For example, the reader looks into Algebra.agda to find what is Semigroup: ------------------------------------------------------- record Semigroup c ? : Set (suc (c ? ?)) where ... field Carrier : Set c _?_ : Rel Carrier ? _?_ : Op? Carrier isSemigroup : IsSemigroup _?_ _?_ open IsSemigroup isSemigroup public ... magma = record { isMagma = isMagma } ... Now, one needs to find a declaration for IsSemigroup. And it resides in a different file of Algebra/Structures.agda : record IsSemigroup (? : Op? A) : Set (a ? ?) where field isMagma : IsMagma ? assoc : Associative ? open IsMagma isMagma public --------------------------------------------------------- And all this implements the meaning of a small sentence: ``Semigroup is Magma in which multiplication _?_ is associative''. Why not put ``record IsSemigroup'' before ``record Semigroup'' in the same file Algebra.agda ? Similarly other `Is' GAS decls can join. So that Algebra.agda and Algebra/Structures.agda will merge into Algebra.agda in which each GAS will be defined in one place. For example, to see what is a group will need to look into one file, not in two files. ? 3. Why Magma declares the fields Carrier and _?_ by new? Similarly, why other GAS re-declare many fields? In theory, we have ``Magma is a setoid with an operation _?_ congruent with respect to the equality _?_''. So, Magma inherits Setoid. And it is natural for its representation in Agda to have setoid somewhere inside it. So, it opens this setoid and uses its fields in further definitions. For example, like this: -- Version II --------------------------------------------------------- record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier S)) : Set (? ? ?=) where open Setoid S using (_?_; Carrier) field ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ record Magma ? ?= : Set (suc (? ? ?=)) where field setoid : Setoid ? ?= open Setoid setoid public infixl 7 _?_ field _?_ : Op? Carrier isMagma : IsMagma setoid _?_ ------------------------------------------------------------------------ And let us call Version I the approach of Standard library lib-0.17. Both versions use an `Is' structure, but II does not re-declare fields. Is not II more natural? Another question may be: ``why splitting each GAS into proper structure and `Is' structure?''. My guess is that this approach allows us to express two GAS-s that are over the same inherited GAS. For example, a programmer can express a product of two Magmae over the same Setoid: ------------------------------------------------------------ module _ {? ?=} (S : Setoid ? ?=) where open Setoid S using (Carrier; _?_) SS = ?-setoid S S open Setoid SS using () renaming (Carrier to CC; _?_ to _=p_) magmaProduct' : (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? IsMagma _?_ _*?_ ? Magma ? ?= magmaProduct' _*?_ _*?_ insM? isM? = ------------------------------------------------------------ (is there any other purpose to introduce `Is' -structures?). This is equally easy to set both in Version I and Version II. But note that both approaches still deviate, a bit, from the theory. Because in theory, it is \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 mg2) ? product-magma, while magmaProduct' takes certain parts of the two magmae. So, there remain somewhat three and a half questions. Thank you in advance for your possible explanation. ------ Sergei From matthewdaggitt at gmail.com Fri Mar 8 23:09:25 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Fri, 8 Mar 2019 22:09:25 +0000 Subject: [Agda] algebra hierarchy in library In-Reply-To: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> Message-ID: 1. Why `Raw' structures? Sometimes you only need the raw operators without assuming any properties over them. See for example the coefficient ring for the ring solver . You could of course change this to require the full ring axioms but this is a) more work for the user and b) unnecessary. The raw versions aren't widely used but they don't affect the hierarchy in anyway so there's no harm in having them. 2. Why putting `Is' structures into a different file? This was an inherited design decision. I know it differs from the way the library is laid out in `Relation.Binary`. The advantage of having them separately is that the module can be parameterised by the equality. See `Data.Nat.Properties` for a use of this. I agree it's a little irritating having to open both `Algebra` and `Algebra.Structures`. It may be that `Algebra` should re-export `Algebra.Structures`. I'm unsure of how to standardise this with `Relation.Binary`. 3. Why Magma declares the fields Carrier and _?_ by new? You've answered your own question here with your magma product example. It's exactly as you describe. If you have two structures of the type `IsX` and you want to combine them, you can specify exactly how the parameters of the two interact to form the 3rd `IsX` type. This wouldn't be possible (or much harder anyway) using Version II. Version I requires a little more boiler plate code (written by the library maintainers) but it makes the hierarchy much easier to use in practice (on the user end). On Fri, Mar 8, 2019 at 3:00 PM Sergei Meshveliani wrote: > Dear standard library developers and supporters, > > can you please answer in (simple words) several questions about the > representation of the algebraic hierarchy in standard library? > > > 1. Why `Raw' structures? > > There are classical generic algebraic structures (call them GAS): > Magma, Semigroup, Monoid, and so on. > > Those of them having some new field respectively to previous structures > are accompanied with the corresponding `Raw' record. For example, Magma > is preceded with RawMagma, Monoid with RawMonoid. Each `Raw' structure > expresses only the signature of the corresponding GAS. > > What the `Raw' structures serve for? > > > 2. Why putting `Is' structures into a different file? > > For example, the reader looks into Algebra.agda to find what is > Semigroup: > > ------------------------------------------------------- > record Semigroup c ? : Set (suc (c ? ?)) where > ... > field Carrier : Set c > _?_ : Rel Carrier ? > _?_ : Op? Carrier > isSemigroup : IsSemigroup _?_ _?_ > > open IsSemigroup isSemigroup public > ... > magma = record { isMagma = isMagma } > ... > > Now, one needs to find a declaration for IsSemigroup. > And it resides in a different file of > Algebra/Structures.agda : > > record IsSemigroup (? : Op? A) : Set (a ? ?) where > field > isMagma : IsMagma ? > assoc : Associative ? > > open IsMagma isMagma public > --------------------------------------------------------- > > And all this implements the meaning of a small sentence: > ``Semigroup is Magma in which multiplication _?_ is associative''. > > Why not put ``record IsSemigroup'' before ``record Semigroup'' in the > same file Algebra.agda ? > > Similarly other `Is' GAS decls can join. So that Algebra.agda and > Algebra/Structures.agda will merge into Algebra.agda in which each > GAS will be defined in one place. > For example, to see what is a group will need to look into one file, not > in two files. > ? > > > 3. Why Magma declares the fields Carrier and _?_ by new? > > Similarly, why other GAS re-declare many fields? > > In theory, we have > ``Magma is a setoid with an operation _?_ congruent with respect to the > equality _?_''. > > So, Magma inherits Setoid. And it is natural for its representation in > Agda to have setoid somewhere inside it. So, it opens this setoid and > uses its fields in further definitions. For example, like this: > > -- Version II --------------------------------------------------------- > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier S)) : > Set (? ? ?=) > where > open Setoid S using (_?_; Carrier) > field > ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > record Magma ? ?= : Set (suc (? ? ?=)) > where > field setoid : Setoid ? ?= > > open Setoid setoid public > infixl 7 _?_ > > field _?_ : Op? Carrier > isMagma : IsMagma setoid _?_ > ------------------------------------------------------------------------ > > And let us call Version I the approach of Standard library lib-0.17. > > Both versions use an `Is' structure, but II does not re-declare fields. > Is not II more natural? > > > Another question may be: > ``why splitting each GAS into proper structure and `Is' structure?''. > > My guess is that this approach allows us to express two GAS-s that are > over the same inherited GAS. For example, a programmer can express a > product of two Magmae over the same Setoid: > ------------------------------------------------------------ > module _ {? ?=} (S : Setoid ? ?=) > where > open Setoid S using (Carrier; _?_) > SS = ?-setoid S S > open Setoid SS using () renaming (Carrier to CC; _?_ to _=p_) > > magmaProduct' : > (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? > IsMagma _?_ _*?_ ? Magma ? ?= > magmaProduct' _*?_ _*?_ insM? isM? = > prove ...; return the Magma record > > > ------------------------------------------------------------ > > (is there any other purpose to introduce `Is' -structures?). > > This is equally easy to set both in Version I and Version II. > > But note that both approaches still deviate, a bit, from the theory. > Because in theory, it is > \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 mg2) ? > product-magma, > while magmaProduct' takes certain parts of the two magmae. > > So, there remain somewhat three and a half questions. > > Thank you in advance for your possible explanation. > > ------ > Sergei > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Sat Mar 9 12:35:52 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 09 Mar 2019 14:35:52 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> Message-ID: <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> On Fri, 2019-03-08 at 22:09 +0000, Matthew Daggitt wrote: > 1. Why `Raw' structures? > > > Sometimes you only need the raw operators without assuming any > properties over them. See for example the coefficient ring for > the ring solver. You could of course change this to require the full > ring axioms but this is a) more work for the user and b) unnecessary. > The raw versions aren't widely used but they don't affect the > hierarchy in anyway so there's no harm in having them. > Yes, it looks like they can be useful for solvers (I wonder, why people, - and standard library, - call provers solvers). > 2. Why putting `Is' structures into a different file? > > > > This was an inherited design decision. I know it differs from the way > the library is laid out in `Relation.Binary`. The advantage of having > them separately is that the module can be parameterised by the > equality. See `Data.Nat.Properties` for a use of this. I agree it's a > little irritating having to open both `Algebra` and > `Algebra.Structures`. It may be that `Algebra` should re-export > `Algebra.Structures`. I'm unsure of how to standardise this with > `Relation.Binary`. > This re-export looks desirable. > > 3. Why Magma declares the fields Carrier and _?_ by new? > > > > You've answered your own question here with your magma product > example. It's exactly as you describe. If this is the only reason, then it occurs that `Is' structure is needed only in few cases. For example, (1) There does not exist different semigroups that inherit ("are over") the same Magma. The difference can be in a _proof_ for associativity, but I doubt of whether this feature can be taken here in account. Let people correct me if I mistake in the following statements. (2) There does not exist different monoids over the same Semigroup. (3) There does not exist different commutative monoids over the same Monoid. (4) There does not exist different groups over the same Monoid. (5) There does not exist different Abelian groups over the same Group. (6) There does not exist different rings over the same Semiring. (7) There does not exist different commutative rings over the same Ring. Here are the two proofs sketches. (2) If a semigroup H is extended to monoids with unities e and e', then e * e' == e == e' by the two unity laws ... (4) If a monoid is extended to two groups with inversion operations i and i', then it holds i x == (i x) * e == (i x) * (x * (i' x)) == ((i x) * x) * (i' x) == e * (i' x) == i' x. Am I missing something? `Is' structures are needed for the cases of the steps of Setoid -- Poset, Setoid -- Magma, CommutativeMonoid -- Semiring. It may be also Ring -- LeftModule (over a ring), if such is added to standard. > If you have two structures of the type `IsX` and you want to combine > them, you can specify exactly how the parameters of the two interact > to form the 3rd `IsX` type. This wouldn't be possible (or much harder > anyway) using Version II. Version I requires a little more boiler > plate code (written by the library maintainers) but it makes the > hierarchy much easier to use in practice (on the user end). > Version II looks more natural to me. But I may be missing something. To make sure, I could rewrite a part of the library for Version II and demonstrate. And what if it occurs better? It will be late to consider for standard. Regards, ------ Sergei > > On Fri, Mar 8, 2019 at 3:00 PM Sergei Meshveliani > wrote: > > Dear standard library developers and supporters, > > can you please answer in (simple words) several questions > about the > representation of the algebraic hierarchy in standard library? > > > 1. Why `Raw' structures? > > There are classical generic algebraic structures (call them > GAS): > Magma, Semigroup, Monoid, and so on. > > Those of them having some new field respectively to previous > structures > are accompanied with the corresponding `Raw' record. For > example, Magma > is preceded with RawMagma, Monoid with RawMonoid. Each `Raw' > structure > expresses only the signature of the corresponding GAS. > > What the `Raw' structures serve for? > > > 2. Why putting `Is' structures into a different file? > > For example, the reader looks into Algebra.agda to find what > is > Semigroup: > > ------------------------------------------------------- > record Semigroup c ? : Set (suc (c ? ?)) where > ... > field Carrier : Set c > _?_ : Rel Carrier ? > _?_ : Op? Carrier > isSemigroup : IsSemigroup _?_ _?_ > > open IsSemigroup isSemigroup public > ... > magma = record { isMagma = isMagma } > ... > > Now, one needs to find a declaration for IsSemigroup. > And it resides in a different file of > Algebra/Structures.agda : > > record IsSemigroup (? : Op? A) : Set (a ? ?) where > field > isMagma : IsMagma ? > assoc : Associative ? > > open IsMagma isMagma public > --------------------------------------------------------- > > And all this implements the meaning of a small sentence: > ``Semigroup is Magma in which multiplication _?_ is > associative''. > > Why not put ``record IsSemigroup'' before ``record Semigroup'' > in the > same file Algebra.agda ? > > Similarly other `Is' GAS decls can join. So that Algebra.agda > and > Algebra/Structures.agda will merge into Algebra.agda in > which each > GAS will be defined in one place. > For example, to see what is a group will need to look into one > file, not > in two files. > ? > > > 3. Why Magma declares the fields Carrier and _?_ by new? > > Similarly, why other GAS re-declare many fields? > > In theory, we have > ``Magma is a setoid with an operation _?_ congruent with > respect to the > equality _?_''. > > So, Magma inherits Setoid. And it is natural for its > representation in > Agda to have setoid somewhere inside it. So, it opens this > setoid and > uses its fields in further definitions. For example, like > this: > > -- Version II > --------------------------------------------------------- > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > (Setoid.Carrier S)) : > Set > (? ? ?=) > where > open Setoid S using (_?_; Carrier) > field > ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > record Magma ? ?= : Set (suc (? ? ?=)) > where > field setoid : Setoid ? ?= > > open Setoid setoid public > infixl 7 _?_ > > field _?_ : Op? Carrier > isMagma : IsMagma setoid _?_ > ------------------------------------------------------------------------ > > And let us call Version I the approach of Standard library > lib-0.17. > > Both versions use an `Is' structure, but II does not > re-declare fields. > Is not II more natural? > > > Another question may be: > ``why splitting each GAS into proper structure and `Is' > structure?''. > > My guess is that this approach allows us to express two GAS-s > that are > over the same inherited GAS. For example, a programmer can > express a > product of two Magmae over the same Setoid: > ------------------------------------------------------------ > module _ {? ?=} (S : Setoid ? ?=) > where > open Setoid S using (Carrier; _?_) > SS = ?-setoid S S > open Setoid SS using () renaming (Carrier to CC; _?_ to > _=p_) > > magmaProduct' : > (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? > IsMagma _?_ _*?_ ? Magma ? ?= > magmaProduct' _*?_ _*?_ insM? isM? = > on CC; > prove ...; return the Magma record > > > ------------------------------------------------------------ > > (is there any other purpose to introduce `Is' -structures?). > > This is equally easy to set both in Version I and Version II. > > But note that both approaches still deviate, a bit, from the > theory. > Because in theory, it is > \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 > mg2) ? > product-magma, > while magmaProduct' takes certain parts of the two magmae. > > So, there remain somewhat three and a half questions. > > Thank you in advance for your possible explanation. > > ------ > Sergei > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mechvel at botik.ru Sat Mar 9 15:08:16 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 09 Mar 2019 17:08:16 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> Message-ID: <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> On Sat, 2019-03-09 at 14:35 +0300, Sergei Meshveliani wrote: > > If this is the only reason, then it occurs that `Is' structure is needed > only in few cases. > For example, > (1) There does not exist different semigroups that inherit ("are over") > the same Magma. The difference can be in a _proof_ for associativity, > but I doubt of whether this feature can be taken here in account. > > Let people correct me if I mistake in the following statements. > > (2) There does not exist different monoids over the same Semigroup. > (3) There does not exist different commutative monoids over the same > Monoid. > (4) There does not exist different groups over the same Monoid. > (5) There does not exist different Abelian groups over the same Group. > (6) There does not exist different rings over the same Semiring. > (7) There does not exist different commutative rings over the same > Ring. [..] Sorry for a silly error. I discover a mistake in (2), (4) (6). For example, Nat1 = Nat\0 is a semigroup by _+_, and zero can be joined in different ways, so that (Nat1 U 0) and (Nat1 U 0') occur different monoids. They are isomorphic, but they have different carriers. A similar effect with carrier may be in (4) and (6). So that there remain (1), (3) and (7). Regards, ------ Sergei > > > > > On Fri, Mar 8, 2019 at 3:00 PM Sergei Meshveliani > > wrote: > > > > Dear standard library developers and supporters, > > > > can you please answer in (simple words) several questions > > about the > > representation of the algebraic hierarchy in standard library? > > > > > > 1. Why `Raw' structures? > > > > There are classical generic algebraic structures (call them > > GAS): > > Magma, Semigroup, Monoid, and so on. > > > > Those of them having some new field respectively to previous > > structures > > are accompanied with the corresponding `Raw' record. For > > example, Magma > > is preceded with RawMagma, Monoid with RawMonoid. Each `Raw' > > structure > > expresses only the signature of the corresponding GAS. > > > > What the `Raw' structures serve for? > > > > > > 2. Why putting `Is' structures into a different file? > > > > For example, the reader looks into Algebra.agda to find what > > is > > Semigroup: > > > > ------------------------------------------------------- > > record Semigroup c ? : Set (suc (c ? ?)) where > > ... > > field Carrier : Set c > > _?_ : Rel Carrier ? > > _?_ : Op? Carrier > > isSemigroup : IsSemigroup _?_ _?_ > > > > open IsSemigroup isSemigroup public > > ... > > magma = record { isMagma = isMagma } > > ... > > > > Now, one needs to find a declaration for IsSemigroup. > > And it resides in a different file of > > Algebra/Structures.agda : > > > > record IsSemigroup (? : Op? A) : Set (a ? ?) where > > field > > isMagma : IsMagma ? > > assoc : Associative ? > > > > open IsMagma isMagma public > > --------------------------------------------------------- > > > > And all this implements the meaning of a small sentence: > > ``Semigroup is Magma in which multiplication _?_ is > > associative''. > > > > Why not put ``record IsSemigroup'' before ``record Semigroup'' > > in the > > same file Algebra.agda ? > > > > Similarly other `Is' GAS decls can join. So that Algebra.agda > > and > > Algebra/Structures.agda will merge into Algebra.agda in > > which each > > GAS will be defined in one place. > > For example, to see what is a group will need to look into one > > file, not > > in two files. > > ? > > > > > > 3. Why Magma declares the fields Carrier and _?_ by new? > > > > Similarly, why other GAS re-declare many fields? > > > > In theory, we have > > ``Magma is a setoid with an operation _?_ congruent with > > respect to the > > equality _?_''. > > > > So, Magma inherits Setoid. And it is natural for its > > representation in > > Agda to have setoid somewhere inside it. So, it opens this > > setoid and > > uses its fields in further definitions. For example, like > > this: > > > > -- Version II > > --------------------------------------------------------- > > > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > > (Setoid.Carrier S)) : > > Set > > (? ? ?=) > > where > > open Setoid S using (_?_; Carrier) > > field > > ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > > > record Magma ? ?= : Set (suc (? ? ?=)) > > where > > field setoid : Setoid ? ?= > > > > open Setoid setoid public > > infixl 7 _?_ > > > > field _?_ : Op? Carrier > > isMagma : IsMagma setoid _?_ > > ------------------------------------------------------------------------ > > > > And let us call Version I the approach of Standard library > > lib-0.17. > > > > Both versions use an `Is' structure, but II does not > > re-declare fields. > > Is not II more natural? > > > > > > Another question may be: > > ``why splitting each GAS into proper structure and `Is' > > structure?''. > > > > My guess is that this approach allows us to express two GAS-s > > that are > > over the same inherited GAS. For example, a programmer can > > express a > > product of two Magmae over the same Setoid: > > ------------------------------------------------------------ > > module _ {? ?=} (S : Setoid ? ?=) > > where > > open Setoid S using (Carrier; _?_) > > SS = ?-setoid S S > > open Setoid SS using () renaming (Carrier to CC; _?_ to > > _=p_) > > > > magmaProduct' : > > (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? > > IsMagma _?_ _*?_ ? Magma ? ?= > > magmaProduct' _*?_ _*?_ insM? isM? = > > > on CC; > > prove ...; return the Magma record > > > > > ------------------------------------------------------------ > > > > (is there any other purpose to introduce `Is' -structures?). > > > > This is equally easy to set both in Version I and Version II. > > > > But note that both approaches still deviate, a bit, from the > > theory. > > Because in theory, it is > > \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 > > mg2) ? > > product-magma, > > while magmaProduct' takes certain parts of the two magmae. > > > > So, there remain somewhat three and a half questions. > > > > Thank you in advance for your possible explanation. > > > > ------ > > Sergei > > > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mechvel at botik.ru Sat Mar 9 17:08:43 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 09 Mar 2019 19:08:43 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> Message-ID: <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> On Sat, 2019-03-09 at 17:08 +0300, Sergei Meshveliani wrote: > On Sat, 2019-03-09 at 14:35 +0300, Sergei Meshveliani wrote: > > > > > If this is the only reason, then it occurs that `Is' structure is needed > > only in few cases. > > For example, > > (1) There does not exist different semigroups that inherit ("are over") > > the same Magma. The difference can be in a _proof_ for associativity, > > but I doubt of whether this feature can be taken here in account. > > > > Let people correct me if I mistake in the following statements. > > > > (2) There does not exist different monoids over the same Semigroup. > > (3) There does not exist different commutative monoids over the same > > Monoid. > > (4) There does not exist different groups over the same Monoid. > > (5) There does not exist different Abelian groups over the same Group. > > (6) There does not exist different rings over the same Semiring. > > (7) There does not exist different commutative rings over the same > > Ring. > [..] > > > Sorry for a silly error. I discover a mistake in (2), (4) (6). > > For example, Nat1 = Nat\0 is a semigroup by _+_, and zero can be > joined in different ways, so that (Nat1 U 0) and (Nat1 U 0') occur > different monoids. They are isomorphic, but they have different > carriers. > A similar effect with carrier may be in (4) and (6). > > So that there remain (1), (3) and (7). No, again an error. A monoid in _this library_ is on the same carrier C as its inherited semigroup. So that to implement a monoid on a given semigroup means to choose any e in C which satisfy the law \forall x (e*x == x*e == x) and to prove this law. And it is proved above that such e is unique. So, I think that similarly, all the points (1) -- (7) are true -- if I am not missing something. Regards, ------ Sergei > > > > > > > > On Fri, Mar 8, 2019 at 3:00 PM Sergei Meshveliani > > > wrote: > > > > > > Dear standard library developers and supporters, > > > > > > can you please answer in (simple words) several questions > > > about the > > > representation of the algebraic hierarchy in standard library? > > > > > > > > > 1. Why `Raw' structures? > > > > > > There are classical generic algebraic structures (call them > > > GAS): > > > Magma, Semigroup, Monoid, and so on. > > > > > > Those of them having some new field respectively to previous > > > structures > > > are accompanied with the corresponding `Raw' record. For > > > example, Magma > > > is preceded with RawMagma, Monoid with RawMonoid. Each `Raw' > > > structure > > > expresses only the signature of the corresponding GAS. > > > > > > What the `Raw' structures serve for? > > > > > > > > > 2. Why putting `Is' structures into a different file? > > > > > > For example, the reader looks into Algebra.agda to find what > > > is > > > Semigroup: > > > > > > ------------------------------------------------------- > > > record Semigroup c ? : Set (suc (c ? ?)) where > > > ... > > > field Carrier : Set c > > > _?_ : Rel Carrier ? > > > _?_ : Op? Carrier > > > isSemigroup : IsSemigroup _?_ _?_ > > > > > > open IsSemigroup isSemigroup public > > > ... > > > magma = record { isMagma = isMagma } > > > ... > > > > > > Now, one needs to find a declaration for IsSemigroup. > > > And it resides in a different file of > > > Algebra/Structures.agda : > > > > > > record IsSemigroup (? : Op? A) : Set (a ? ?) where > > > field > > > isMagma : IsMagma ? > > > assoc : Associative ? > > > > > > open IsMagma isMagma public > > > --------------------------------------------------------- > > > > > > And all this implements the meaning of a small sentence: > > > ``Semigroup is Magma in which multiplication _?_ is > > > associative''. > > > > > > Why not put ``record IsSemigroup'' before ``record Semigroup'' > > > in the > > > same file Algebra.agda ? > > > > > > Similarly other `Is' GAS decls can join. So that Algebra.agda > > > and > > > Algebra/Structures.agda will merge into Algebra.agda in > > > which each > > > GAS will be defined in one place. > > > For example, to see what is a group will need to look into one > > > file, not > > > in two files. > > > ? > > > > > > > > > 3. Why Magma declares the fields Carrier and _?_ by new? > > > > > > Similarly, why other GAS re-declare many fields? > > > > > > In theory, we have > > > ``Magma is a setoid with an operation _?_ congruent with > > > respect to the > > > equality _?_''. > > > > > > So, Magma inherits Setoid. And it is natural for its > > > representation in > > > Agda to have setoid somewhere inside it. So, it opens this > > > setoid and > > > uses its fields in further definitions. For example, like > > > this: > > > > > > -- Version II > > > --------------------------------------------------------- > > > > > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > > > (Setoid.Carrier S)) : > > > Set > > > (? ? ?=) > > > where > > > open Setoid S using (_?_; Carrier) > > > field > > > ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > > > > > record Magma ? ?= : Set (suc (? ? ?=)) > > > where > > > field setoid : Setoid ? ?= > > > > > > open Setoid setoid public > > > infixl 7 _?_ > > > > > > field _?_ : Op? Carrier > > > isMagma : IsMagma setoid _?_ > > > ------------------------------------------------------------------------ > > > > > > And let us call Version I the approach of Standard library > > > lib-0.17. > > > > > > Both versions use an `Is' structure, but II does not > > > re-declare fields. > > > Is not II more natural? > > > > > > > > > Another question may be: > > > ``why splitting each GAS into proper structure and `Is' > > > structure?''. > > > > > > My guess is that this approach allows us to express two GAS-s > > > that are > > > over the same inherited GAS. For example, a programmer can > > > express a > > > product of two Magmae over the same Setoid: > > > ------------------------------------------------------------ > > > module _ {? ?=} (S : Setoid ? ?=) > > > where > > > open Setoid S using (Carrier; _?_) > > > SS = ?-setoid S S > > > open Setoid SS using () renaming (Carrier to CC; _?_ to > > > _=p_) > > > > > > magmaProduct' : > > > (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? > > > IsMagma _?_ _*?_ ? Magma ? ?= > > > magmaProduct' _*?_ _*?_ insM? isM? = > > > > > on CC; > > > prove ...; return the Magma record > > > > > > > ------------------------------------------------------------ > > > > > > (is there any other purpose to introduce `Is' -structures?). > > > > > > This is equally easy to set both in Version I and Version II. > > > > > > But note that both approaches still deviate, a bit, from the > > > theory. > > > Because in theory, it is > > > \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 > > > mg2) ? > > > product-magma, > > > while magmaProduct' takes certain parts of the two magmae. > > > > > > So, there remain somewhat three and a half questions. > > > > > > Thank you in advance for your possible explanation. > > > > > > ------ > > > Sergei > > > > > > > > > > > > > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > From mechvel at botik.ru Sat Mar 9 19:28:07 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 09 Mar 2019 21:28:07 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> Message-ID: <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> On Sat, 2019-03-09 at 19:08 +0300, Sergei Meshveliani wrote: > On Sat, 2019-03-09 at 17:08 +0300, Sergei Meshveliani wrote: > > On Sat, 2019-03-09 at 14:35 +0300, Sergei Meshveliani wrote: > > > > > > > > If this is the only reason, then it occurs that `Is' structure is needed > > > only in few cases. > > > For example, > > > (1) There does not exist different semigroups that inherit ("are over") > > > the same Magma. The difference can be in a _proof_ for associativity, > > > but I doubt of whether this feature can be taken here in account. > > > > > > Let people correct me if I mistake in the following statements. > > > > > > (2) There does not exist different monoids over the same Semigroup. > > > (3) There does not exist different commutative monoids over the same > > > Monoid. > > > (4) There does not exist different groups over the same Monoid. > > > (5) There does not exist different Abelian groups over the same Group. > > > (6) There does not exist different rings over the same Semiring. > > > (7) There does not exist different commutative rings over the same > > > Ring. > > [..] > > > > > > Sorry for a silly error. I discover a mistake in (2), (4) (6). > > > > For example, Nat1 = Nat\0 is a semigroup by _+_, and zero can be > > joined in different ways, so that (Nat1 U 0) and (Nat1 U 0') occur > > different monoids. They are isomorphic, but they have different > > carriers. > > A similar effect with carrier may be in (4) and (6). > > > > So that there remain (1), (3) and (7). > > > No, again an error. > > A monoid in _this library_ is on the same carrier C as its inherited > semigroup. So that to implement a monoid on a given semigroup means to > choose any e in C which satisfy the law \forall x (e*x == x*e == x) > and to prove this law. > And it is proved above that such e is unique. > > So, I think that similarly, all the points (1) -- (7) are true > -- if I am not missing something. We need one more step towards truth :-) Having a Monoid instance, how many different group instances can be defined on this monoid (hence, on the same carrier C) ? Possible inversion map on C is unique, as shown in one of previous letters. But it can be implemented by different algorithms, and this can be used by programmers. Algorithms matter in the library. And according to Agda, different algorithms for inversion give different groups. So that there remain the above statements (1), (3), (7), and may be (2). -- SM > > > > > > > > > > > > > On Fri, Mar 8, 2019 at 3:00 PM Sergei Meshveliani > > > > wrote: > > > > > > > > Dear standard library developers and supporters, > > > > > > > > can you please answer in (simple words) several questions > > > > about the > > > > representation of the algebraic hierarchy in standard library? > > > > > > > > > > > > 1. Why `Raw' structures? > > > > > > > > There are classical generic algebraic structures (call them > > > > GAS): > > > > Magma, Semigroup, Monoid, and so on. > > > > > > > > Those of them having some new field respectively to previous > > > > structures > > > > are accompanied with the corresponding `Raw' record. For > > > > example, Magma > > > > is preceded with RawMagma, Monoid with RawMonoid. Each `Raw' > > > > structure > > > > expresses only the signature of the corresponding GAS. > > > > > > > > What the `Raw' structures serve for? > > > > > > > > > > > > 2. Why putting `Is' structures into a different file? > > > > > > > > For example, the reader looks into Algebra.agda to find what > > > > is > > > > Semigroup: > > > > > > > > ------------------------------------------------------- > > > > record Semigroup c ? : Set (suc (c ? ?)) where > > > > ... > > > > field Carrier : Set c > > > > _?_ : Rel Carrier ? > > > > _?_ : Op? Carrier > > > > isSemigroup : IsSemigroup _?_ _?_ > > > > > > > > open IsSemigroup isSemigroup public > > > > ... > > > > magma = record { isMagma = isMagma } > > > > ... > > > > > > > > Now, one needs to find a declaration for IsSemigroup. > > > > And it resides in a different file of > > > > Algebra/Structures.agda : > > > > > > > > record IsSemigroup (? : Op? A) : Set (a ? ?) where > > > > field > > > > isMagma : IsMagma ? > > > > assoc : Associative ? > > > > > > > > open IsMagma isMagma public > > > > --------------------------------------------------------- > > > > > > > > And all this implements the meaning of a small sentence: > > > > ``Semigroup is Magma in which multiplication _?_ is > > > > associative''. > > > > > > > > Why not put ``record IsSemigroup'' before ``record Semigroup'' > > > > in the > > > > same file Algebra.agda ? > > > > > > > > Similarly other `Is' GAS decls can join. So that Algebra.agda > > > > and > > > > Algebra/Structures.agda will merge into Algebra.agda in > > > > which each > > > > GAS will be defined in one place. > > > > For example, to see what is a group will need to look into one > > > > file, not > > > > in two files. > > > > ? > > > > > > > > > > > > 3. Why Magma declares the fields Carrier and _?_ by new? > > > > > > > > Similarly, why other GAS re-declare many fields? > > > > > > > > In theory, we have > > > > ``Magma is a setoid with an operation _?_ congruent with > > > > respect to the > > > > equality _?_''. > > > > > > > > So, Magma inherits Setoid. And it is natural for its > > > > representation in > > > > Agda to have setoid somewhere inside it. So, it opens this > > > > setoid and > > > > uses its fields in further definitions. For example, like > > > > this: > > > > > > > > -- Version II > > > > --------------------------------------------------------- > > > > > > > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > > > > (Setoid.Carrier S)) : > > > > Set > > > > (? ? ?=) > > > > where > > > > open Setoid S using (_?_; Carrier) > > > > field > > > > ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > > > > > > > record Magma ? ?= : Set (suc (? ? ?=)) > > > > where > > > > field setoid : Setoid ? ?= > > > > > > > > open Setoid setoid public > > > > infixl 7 _?_ > > > > > > > > field _?_ : Op? Carrier > > > > isMagma : IsMagma setoid _?_ > > > > ------------------------------------------------------------------------ > > > > > > > > And let us call Version I the approach of Standard library > > > > lib-0.17. > > > > > > > > Both versions use an `Is' structure, but II does not > > > > re-declare fields. > > > > Is not II more natural? > > > > > > > > > > > > Another question may be: > > > > ``why splitting each GAS into proper structure and `Is' > > > > structure?''. > > > > > > > > My guess is that this approach allows us to express two GAS-s > > > > that are > > > > over the same inherited GAS. For example, a programmer can > > > > express a > > > > product of two Magmae over the same Setoid: > > > > ------------------------------------------------------------ > > > > module _ {? ?=} (S : Setoid ? ?=) > > > > where > > > > open Setoid S using (Carrier; _?_) > > > > SS = ?-setoid S S > > > > open Setoid SS using () renaming (Carrier to CC; _?_ to > > > > _=p_) > > > > > > > > magmaProduct' : > > > > (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? > > > > IsMagma _?_ _*?_ ? Magma ? ?= > > > > magmaProduct' _*?_ _*?_ insM? isM? = > > > > > > > on CC; > > > > prove ...; return the Magma record > > > > > > > > > ------------------------------------------------------------ > > > > > > > > (is there any other purpose to introduce `Is' -structures?). > > > > > > > > This is equally easy to set both in Version I and Version II. > > > > > > > > But note that both approaches still deviate, a bit, from the > > > > theory. > > > > Because in theory, it is > > > > \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 > > > > mg2) ? > > > > product-magma, > > > > while magmaProduct' takes certain parts of the two magmae. > > > > > > > > So, there remain somewhat three and a half questions. > > > > > > > > Thank you in advance for your possible explanation. > > > > > > > > ------ > > > > Sergei > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > Agda mailing list > > > > Agda at lists.chalmers.se > > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > From apostolis.xekoukoulotakis at gmail.com Sat Mar 9 21:56:25 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Sat, 9 Mar 2019 22:56:25 +0200 Subject: [Agda] Proving equality of levels with heterogeneous equality. Message-ID: I don't really know the theory behind this. It simply came out in practice because of this(1) Can anyone prove this? I think it is impossible to prove right now. ``` infix 4 _?_ data _?_ {?1} {A : Set ?1} (x : A) : ? {?2} ? {B : Set ?2} ? B ? Set ?1 where refl : x ? x lemma : ?{l1 l2} ? {A : Set l1} ? {B : Set l2} ? A ? B ? l1 ? l2 lemma x = {!!} ``` Till now, I have considered levels as a nuance that I don't want to deal with. (1) : https://github.com/agda/agda-stdlib/pull/608 -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Sun Mar 10 01:59:25 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Sun, 10 Mar 2019 01:59:25 +0100 Subject: [Agda] Proving equality of levels with heterogeneous equality. In-Reply-To: References: Message-ID: It's not possible to prove this in Agda because the pattern matching unification algorithm only deals with data constructors (such as 'zero' or 'suc'), not with type constructors (such as 'Nat' or 'Set'). I don't immediately see if your particular lemma here would break soundness, but that doesn't say much. -- Jesper On Sat, Mar 9, 2019 at 9:57 PM Apostolis Xekoukoulotakis < apostolis.xekoukoulotakis at gmail.com> wrote: > I don't really know the theory behind this. It simply came out in practice > because of this(1) > > Can anyone prove this? I think it is impossible to prove right now. > ``` > infix 4 _?_ > > data _?_ {?1} {A : Set ?1} (x : A) : ? {?2} ? {B : Set ?2} ? B ? Set ?1 > where > refl : x ? x > > lemma : ?{l1 l2} ? {A : Set l1} ? {B : Set l2} > ? A ? B ? l1 ? l2 > lemma x = {!!} > ``` > Till now, I have considered levels as a nuance that I don't want to deal > with. > > (1) : https://github.com/agda/agda-stdlib/pull/608 > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From effectfully at gmail.com Sun Mar 10 11:12:48 2019 From: effectfully at gmail.com (Roman) Date: Sun, 10 Mar 2019 13:12:48 +0300 Subject: [Agda] Proving equality of levels with heterogeneous equality. In-Reply-To: References: Message-ID: Quoting an old thread: It seems to me that all we need is suc-inj : {? ? : Level} -> suc ? ? suc ? -> ? ? ? suc-inj refl = refl -- ? != ? of type Level -- when checking that the pattern refl has type suc ? ? suc ? because we can write hcong : ? {? ? ?} {A : Set ?} {B : Set ?} {D : Set ?} {x : A} {y : B} -> (f : ? {?} {C : Set ?} -> C -> D) -> x ? y -> f x ? f y hcong f refl = refl levelOf : ? {?} {A : Set ?} -> A -> Level levelOf {?} _ = ? eq : ? {? ?} -> Set ? ? Set ? -> ? ? ? eq p = {!hcong levelOf p!} and the type of the expression in the hole is suc (suc ?) ? suc (suc ?) Currently we can define `eq' as eq : ? {? ?} -> Set ? ? Set ? -> ? ? ? eq {?} {?} _ rewrite trustMe {x = ?} {?} = refl which should be enough in most cases. From monnier at iro.umontreal.ca Sun Mar 10 19:18:31 2019 From: monnier at iro.umontreal.ca (Stefan Monnier) Date: Sun, 10 Mar 2019 14:18:31 -0400 Subject: [Agda] Proving equality of levels with heterogeneous equality. References: Message-ID: > It's not possible to prove this in Agda because the pattern matching > unification algorithm only deals with data constructors (such as 'zero' or > 'suc'), not with type constructors (such as 'Nat' or 'Set'). I don't > immediately see if your particular lemma here would break soundness, but > that doesn't say much. I'm not surprised it's not possible, but I'm surprised by this explanation. I'd have thought the first reason is that ?? ? ?? is ill-typed because ??, ?? : Level (?) : {? : Level} ? {A : Set ?} ? A ? A ? Set ? and there is no ? for which `Level : Set ?` Stefan From fdhzs2010 at hotmail.com Sun Mar 10 19:23:17 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sun, 10 Mar 2019 18:23:17 +0000 Subject: [Agda] Proving equality of levels with heterogeneous equality. In-Reply-To: References: , Message-ID: I don't think so, though. Level should just be a counter for the universes, so it doesn't have to be big. open import Level Foo : Set Foo = Level This code actually works in Agda. Sincerely Yours, Jason Hu ________________________________ From: Agda on behalf of Stefan Monnier Sent: March 10, 2019 2:18 PM To: agda at lists.chalmers.se Subject: Re: [Agda] Proving equality of levels with heterogeneous equality. > It's not possible to prove this in Agda because the pattern matching > unification algorithm only deals with data constructors (such as 'zero' or > 'suc'), not with type constructors (such as 'Nat' or 'Set'). I don't > immediately see if your particular lemma here would break soundness, but > that doesn't say much. I'm not surprised it's not possible, but I'm surprised by this explanation. I'd have thought the first reason is that ?? ? ?? is ill-typed because ??, ?? : Level (?) : {? : Level} ? {A : Set ?} ? A ? A ? Set ? and there is no ? for which `Level : Set ?` Stefan _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Sun Mar 10 20:42:49 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sun, 10 Mar 2019 22:42:49 +0300 Subject: [Agda] pontwise ++-cong, reverse-cong Message-ID: <1552246969.2441.25.camel@one.mechvel.pereslavl.ru> Dear standard library developers, has the library proofs for ++-cong, reverse-cong for the pointwise equality on lists (for _++_ and `reverse' respectvely) ? If it has not, then may be it needs to have such (may be together with some other `-cong' items for the pointwise equality) ? Thanks, ------ Sergei From mechvel at botik.ru Sun Mar 10 20:45:13 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sun, 10 Mar 2019 22:45:13 +0300 Subject: [Agda] pontwise ++-cong, reverse-cong In-Reply-To: <1552246969.2441.25.camel@one.mechvel.pereslavl.ru> References: <1552246969.2441.25.camel@one.mechvel.pereslavl.ru> Message-ID: <1552247113.2441.27.camel@one.mechvel.pereslavl.ru> I mean pointwise equality over _?_ rather than _?_. On Sun, 2019-03-10 at 22:42 +0300, Sergei Meshveliani wrote: > Dear standard library developers, > > has the library proofs for ++-cong, reverse-cong > for the pointwise equality on lists > (for _++_ and `reverse' respectvely) ? > > If it has not, then may be it needs to have such > (may be together with some other `-cong' items for the pointwise > equality) ? > > Thanks, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From guillaume.allais at ens-lyon.org Mon Mar 11 00:36:45 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Mon, 11 Mar 2019 00:36:45 +0100 Subject: [Agda] pontwise ++-cong, reverse-cong In-Reply-To: <1552246969.2441.25.camel@one.mechvel.pereslavl.ru> References: <1552246969.2441.25.camel@one.mechvel.pereslavl.ru> Message-ID: <323ab6b3-8061-bb90-773e-a399496b4e21@ens-lyon.org> Hi Sergei, Is this what you are looking for? https://agda.github.io/agda-stdlib/Data.List.Relation.Binary.Pointwise.html#7371 ++? : ? {ws xs ys zs} ? Pointwise _?_ ws xs ? Pointwise _?_ ys zs ? Pointwise _?_ (ws ++ ys) (xs ++ zs) Cheers, -- gallais On 10/03/2019 20:42, Sergei Meshveliani wrote: > Dear standard library developers, > > has the library proofs for ++-cong, reverse-cong > for the pointwise equality on lists > (for _++_ and `reverse' respectvely) ? > > If it has not, then may be it needs to have such > (may be together with some other `-cong' items for the pointwise > equality) ? > > Thanks, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From m.escardo at cs.bham.ac.uk Mon Mar 11 13:39:48 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Mon, 11 Mar 2019 12:39:48 +0000 Subject: [Agda] .lagda.md in emacs interactive mode Message-ID: <420f36b5-7064-f8e8-999c-621fbcd46aa6@cs.bham.ac.uk> I am trying to use literate Agda with .lagda.md When I start emacs with such a file, it doesn't start with the agda mode. Do I need to add something to my .emacs? After I start the Agda mode manually, I can type check the file. However, when I have holes, the type of the hole does appear at the bottom mini-window, but the question mark "?" remains as a question mark. What should I do to fix this? Thanks, Martin From nad at cse.gu.se Mon Mar 11 21:12:03 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 11 Mar 2019 21:12:03 +0100 Subject: [Agda] .lagda.md in emacs interactive mode In-Reply-To: <420f36b5-7064-f8e8-999c-621fbcd46aa6@cs.bham.ac.uk> References: <420f36b5-7064-f8e8-999c-621fbcd46aa6@cs.bham.ac.uk> Message-ID: <635bd3eb-9754-15d8-a274-413bde0e9dd4@cse.gu.se> On 11/03/2019 13.39, Martin Escardo wrote: > When I start emacs with such a file, it doesn't start with the agda > mode. Do I need to add something to my .emacs? The Emacs mode currently does not support .lagda.md files: https://github.com/agda/agda/issues/2837 -- /NAD From david.nowak at univ-lille.fr Mon Mar 11 21:24:34 2019 From: david.nowak at univ-lille.fr (David Nowak) Date: Mon, 11 Mar 2019 21:24:34 +0100 Subject: [Agda] ENTROPY 2019: Deadline Extension -- Final Call for Papers In-Reply-To: <2364ECC8-852C-4A07-AA9C-ED08CB1B17E7@univ-lille.fr> References: <2364ECC8-852C-4A07-AA9C-ED08CB1B17E7@univ-lille.fr> Message-ID: The deadline for ENTROPY 2019 is extended to March 15, 2019. You can submit via our Easychair website: https://easychair.org/conferences/?conf=entropy2019 Questions can be directed to: entropy2019 at sciencesconf.org ************************************************************************** Final Call for papers ? ENTROPY 2019 ENabling TRust through Os Proofs ? and beYond Second International workshop on the use of theorem provers for modelling and verification at the hardware-software interface https://entropy2019.sciencesconf.org Co-located with EuroS&P'19, KTH, Stockholm, June 2019 ************************************************************************** INVITED SPEAKERS Dominique Bolignano, Prove & Run Gernot Heiser, University of New South Wales Frank Piessens, KU Leuven Peter Sewell, University of Cambridge IMPORTANT DATES Paper submission: March 15, 2019 Author notification: April 10, 2019 Camera-ready versions: April 22, 2019 (strict) Workshop: 16 June 2019 AIM AND SCOPE Low level software such as kernels and drivers, along with the hardware this software runs on, is critical for application security. In contrast with user applications, OS kernel software runs in privileged CPU mode and is thus highly critical. Large projects such as seL4, VeriSoft, CertiKoS and Prosper have invested considerable resources in developing formally verified systems such as hypervisors and microkernels, supplying proofs that they satisfy critical properties. Such proofs are delicate in terms of the scale and complexity of real systems, the models used in performing the proof search, and the relations between the two, which recent vulnerabilities such as Spectre and Meltdown have shown to be a highly non-trivial issue. The purpose of this workshop is to share, compare and disseminate best practices, tools and methodologies to verify OS kernels, also setting the stage for future steps in the direction of fully verified systems, dealing with issues related to modelling, model validation, and large proof maintenance through system evolution. On one hand, we need to make low-level proofs more scalable, modular and cost-effective. On the other hand, once certified systems are available, preservation and maintenance of their proofs of validity become key questions. The goal of the ENTROPY workshop is to provide a forum for researchers and practitioners in this space, linking operating systems, formal methods, and hardware architecture, interested in system design as well as machine verified mathematical proofs using proof assistants such as Coq, Isabelle and HOL4. This will be the second edition of the ENTROPY workshop series. The first workshop was organised by the Pip Development Team at University of Lille in 2018. TOPICS OF INTEREST Specific topics include, but are not limited to: * Verified kernels and hypervisors * Verified security architectures and models * Tools and frameworks for hardware security analysis * Tools and frameworks for security analysis * Formal hardware models and model validation techniques * Theorem prover based tools and frameworks for verification of low level code * Combinations of static analysis and theorem proving * Theories and techniques for compositional security analysis * Case studies and industrial experience reports * Proof maintenance techniques and problems * Compositional models and verification techniques * Proof oriented design The aim of the workshop is to stimulate innovation and active exchange of ideas, so position papers, work-in-progress and industrial experience submissions are welcome. SUBMISSION AND PUBLICATION There are two categories of submissions: 1. Regular papers describing fully developed work and complete results (10 pages, references included, IEEE format) 2. Short papers, position papers, industry experience reports, work-in-progress submissions (4 pages, references included, IEEE format) All papers should be in English and describe original work that has not been published or submitted elsewhere. The submission category should be clearly indicated. All submissions will be fully reviewed by members of the Programme Committee. Papers will appear in IEEE Xplore in a companion volume to the regular EuroS&P proceedings. For formatting and submission instructions see https://entropy2019.sciencesconf.org. PROGRAM CHAIRS Mads Dam, KTH Royal Institute of Technology David Nowak, CNRS and University of Lille PROGRAM COMMITTEE Christoph Baumann, Ericsson AB Gustavo Betarte, Univ. de la Rep?blica, Uruguay David Cock, ETH Zurich Mads Dam, KTH Royal Institute of Technology (chair) Anthony Fox, ARM Deepak Garg, MPI Saarbrucken Ronghui Gu, Columbia University Samuel Hym, Univ. Lille Thomas Jensen, INRIA and Univ. Rennes Toby Murray, Univ. Melbourne David Nowak, CNRS & Univ. Lille (chair) Vicente Sanchez-Leighton, Orange Labs Thomas Sewell, Chalmers -- David Nowak http://www.cristal.univ-lille.fr/~nowakd/ From 33dbqnxpy7if at gmail.com Mon Mar 11 22:10:05 2019 From: 33dbqnxpy7if at gmail.com (Serge Leblanc) Date: Mon, 11 Mar 2019 22:10:05 +0100 Subject: [Agda] Why unification fail? In-Reply-To: <023a2756-c22f-148b-101f-de09b3db17c8@ens-lyon.org> References: <023a2756-c22f-148b-101f-de09b3db17c8@ens-lyon.org> Message-ID: <27651d18-b3de-c936-05d8-c31b2882c834@gmail.com> In the following example, I'm incapable of matching the types although I have tried the 'inspect' idiom. Would anyone please tell me the way? En la sekva ekzemplo, mi nekapablas kongrui la tipojn kvankam mi provis la idiomon 'inspect'. ?u iu bonvolus indiki al mi la vojon? Sinceran dankon. -- Serge Leblanc ------------------------------------------------------------------------ gpg --search-keys 0x67B17A3F Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- module Chomp2 where open import Data.Nat --as ? open import Data.Nat.Properties --open import Function using (id ; _?_) open import Relation.Binary.PropositionalEquality as PropEq using (_?_ ; refl ; cong ; sym ; inspect ; [_] ) -- ; _?_ ; refl ; sym ; trans ; cong ; cong? ; cong-app) open PropEq.?-Reasoning infixr 15 _?_ data ? : ? ? Set where [_] : (o : ?) ? ? o _?_ : ? {n} ? (x : ?) ? (xs : ? n) ? ? (x + n) ? : ? {n} ? ? n ? ? ? [ o ] = o ? (h ? t) = h + ? t --infix 25 _?_ -- U+2ABE ? +-distrib?-?? : (m k : ?) ? suc (m + k) ? m ? suc (k + m) +-distrib?-?? m k = begin suc (m + k) ? m ?? cong (? s ? suc s ? m) (+-comm m k) ? suc (k + m) ? m ?? sym (+-distrib?-? m (suc k) 0) ? suc (k + m) ? +-distrib?-?? : (m k : ?) ? suc (m + k) ? m ? suc (m + k) +-distrib?-?? m k = begin suc (m + k) ? m ?? +-distrib?-?? m k ? suc (k + m) ?? cong suc (+-comm k m) ? suc (m + k) ? +-distrib?-?? : (m k : ?) ? m ? suc (m + k) ? suc (k + m) +-distrib?-?? m k = begin m ? suc (m + k) ?? cong (? s ? m ? suc s) (+-comm m k) ? m ? suc (k + m) ?? sym (+-distrib?-? m 0 (suc k)) ? suc (k + m) ? +-distrib?-?? : (m k : ?) ? m ? suc (m + k) ? suc (m + k) +-distrib?-?? m k = begin m ? suc (m + k) ?? +-distrib?-?? m k ? suc (k + m) ?? cong suc (+-comm k m) ? suc (m + k) ? l? = 3 ? 2 ? [ 4 ] l? = 3 ? 3 ? 5 ? [ 3 ] ? : ? {n? n?} ? ? n? ? ? n? ? ? (n? ? n?) ? l?@([ o? ]) l?@([ o? ]) with compare o? o? ... | less m k rewrite +-distrib?-?? m k = suc k ? [ m ] ... | equal m rewrite ?-idem m = [ m ] ... | greater m k rewrite +-distrib?-?? m k = suc k ? [ m ] ? {q?} {q?} l?@([ o? ]) l?@(h? ? t?) with q? | compare q? q? ... | ?l | less m k rewrite +-distrib?-?? m k = {! (?l ? (? (? l? t?))) ? ? l? t? !} ... | ?l | equal m rewrite ?-idem m = {! l? !} ... | ?l | greater m k rewrite +-distrib?-?? m k = {! suc k ? l? !} ? {q?} {q?} l?@(h? ? t?) l?@([ o? ]) with q? | compare q? q? ... | ?l | less m k rewrite +-distrib?-?? m k = {! suc k ? l? !} ... | ?l | equal m rewrite ?-idem m = {! l? !} ... | ?l | greater m k rewrite +-distrib?-?? m k = {! (?l ? (? (? t? l?))) ? ? t? l? !} ? {q?} {q?} l?@(h? ? t?) l?@(h? ? t?) with q? | q? | compare q? q? ... | ?l? | ?l? | less m k rewrite +-distrib?-?? m k = {! (?l? ? ? (? l? t?)) ? ? l? t? !} ... | ?l? | ?l? | equal m rewrite ?-idem m = {! (m ? ? (? t? t?)) ? ? t? t? !} ... | ?l? | ?l? | greater m k rewrite +-distrib?-?? m k = {! (?l? ? ? (? t? l?)) ? ? t? l? !} -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 228 bytes Desc: OpenPGP digital signature URL: From pedagand at gmail.com Mon Mar 11 23:14:43 2019 From: pedagand at gmail.com (Pierre-Evariste Dagand) Date: Mon, 11 Mar 2019 23:14:43 +0100 Subject: [Agda] .lagda.md in emacs interactive mode In-Reply-To: <635bd3eb-9754-15d8-a274-413bde0e9dd4@cse.gu.se> References: <420f36b5-7064-f8e8-999c-621fbcd46aa6@cs.bham.ac.uk> <635bd3eb-9754-15d8-a274-413bde0e9dd4@cse.gu.se> Message-ID: > On 11/03/2019 13.39, Martin Escardo wrote: > > When I start emacs with such a file, it doesn't start with the agda > > mode. Do I need to add something to my .emacs? > > The Emacs mode currently does not support .lagda.md files: > > https://github.com/agda/agda/issues/2837 But that shouldn't stop you from trying: here is a .dir-locals https://github.com/pedagand/MPRI-2.4-DTP/blob/master/.dir-locals.el to put at the root at your project. Then, Emacs will let you load, edit, etc. your literate files. For instance, this example (and all the others in that repos) https://github.com/pedagand/MPRI-2.4-DTP/blob/master/01-effectful/Monad.lagda.rst works like a charm (I use 'rst' files, YMMV with markdown). Use at your own risk, -- Pierre-Evariste From m.escardo at cs.bham.ac.uk Mon Mar 11 23:47:04 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Mon, 11 Mar 2019 22:47:04 +0000 Subject: [Agda] .lagda.md in emacs interactive mode In-Reply-To: References: <420f36b5-7064-f8e8-999c-621fbcd46aa6@cs.bham.ac.uk> <635bd3eb-9754-15d8-a274-413bde0e9dd4@cse.gu.se> Message-ID: <259321ce-4604-70a6-a44a-5f76b03c676d@cs.bham.ac.uk> Thanks, both. What I am doing instead (for writing lecture notes) is: * I have a file x.lagda (rather than x.lagda.md). This allows me to have holes. The code goes within \begin{code} and \end{code} environments, the rest is markdown of github flavour. * To render it, I do `agda --html --html-highlight=code x.lagda`. * This generates a file `html/x.tex` (which actually is not latex but instead text with html for the Agda code and the markdown code untouched) which I rename to `x.md` and then convert to html with some markdown processor. This is done in a script, of course, and there are multiple files, not just `x`. Because anyway if we had x.lagda.md we would still need to run `agda --html`, the above doesn't create extra steps other than renaming the .tex file to .md, but this is anyway in the same script that runs `agda --html`. This needs the development version of Agda for the option `html-highlight=code` Martin On 11/03/2019 22:14, pedagand at gmail.com wrote: >> On 11/03/2019 13.39, Martin Escardo wrote: >>> When I start emacs with such a file, it doesn't start with the agda >>> mode. Do I need to add something to my .emacs? >> >> The Emacs mode currently does not support .lagda.md files: >> >> https://github.com/agda/agda/issues/2837 > > But that shouldn't stop you from trying: here is a .dir-locals > > https://github.com/pedagand/MPRI-2.4-DTP/blob/master/.dir-locals.el > > to put at the root at your project. Then, Emacs will let you load, > edit, etc. your literate files. > > For instance, this example (and all the others in that repos) > > https://github.com/pedagand/MPRI-2.4-DTP/blob/master/01-effectful/Monad.lagda.rst > > works like a charm (I use 'rst' files, YMMV with markdown). > > > Use at your own risk, > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From mechvel at botik.ru Tue Mar 12 19:00:03 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Tue, 12 Mar 2019 21:00:03 +0300 Subject: [Agda] overlapping patters Message-ID: <1552413603.2301.6.camel@one.mechvel.pereslavl.ru> Dear Agda developers, I have a function defined by several patterns, and it is type-checked. But the first pattern is a special case of the second one. And after its removal the program remains type-checked. Is Agda (Development, January 1, 2019) supposed to report about such overlaps? Thanks, ------ Sergei From Jesper at sikanda.be Wed Mar 13 02:26:27 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 13 Mar 2019 02:26:27 +0100 Subject: [Agda] overlapping patters In-Reply-To: <1552413603.2301.6.camel@one.mechvel.pereslavl.ru> References: <1552413603.2301.6.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, If you load your file in the Emacs mode, you will notice the second clause has a (very faint) grey background on the second clause, which means that it does not hold definitionally. You can also enable the option --exact-split, which will make Agda raise an error when there are overlapping patterns. -- Jesper On Tue, Mar 12, 2019 at 7:00 PM Sergei Meshveliani wrote: > Dear Agda developers, > > I have a function defined by several patterns, and it is type-checked. > But the first pattern is a special case of the second one. And after its > removal the program remains type-checked. > > Is Agda (Development, January 1, 2019) supposed to report about such > overlaps? > > Thanks, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lehmann at tet.tu-berlin.de Thu Mar 14 08:15:20 2019 From: lehmann at tet.tu-berlin.de (Marcus Christian Lehmann) Date: Thu, 14 Mar 2019 08:15:20 +0100 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= Message-ID: Hello Agda Community, The case-split C-c on proof of ? works great and even leaves out impossible cases.But for case-splits of proofs of it's negation ? I get > Cannot split on argument of non-datatype ? x? ?? ? ? x? ?? when > checking that the expression ? has type ? Is there a nice way to have case-split work for these cases (i.e. on ?() )? I could only come up with manually providing "inequality evidence" for my (mutual) datatypes by writing out all unequal combinations of the constructors but the performance is horrible and the case split is really awful. My context is, that for a function > MappedReferenceType : C++Type ? Bool ? C++Type > ... its effect on such C++Type is computed by the case-generation > f3 : (x : C++Type) ? (v : Bool) ? (y : C++Type) ? MappedReferenceType > x v ? y ? ? > f3 x v y p = ? > where I can split with C-c on x v p simultaneously, and then eliminate with four further splits on x all occurences of > f3 : (x : C++Type) ? (v : Bool) ? (y : C++Type) ? MappedReferenceType > x v ? y ? ? > ... > f3 ? x &? ??????????? true? .(? x &? ??)?????????? refl = tt > f3 ? x &? ??????????? true? .(? x &? ??)?????????? refl = tt > f3 ? (x const?) &? ?? true? .(? x ??) refl = tt > f3 ? (x const?) &? ?? true? .(? x ??) refl = tt > f3 ? x &&? ?????????? true? .(? x &&? ??)????????? refl = tt > ... Now for observing where two functions "differ", I currently "create" the ? cases as the absurd ones from ? > f12 : (x : C++Type) ? (v : Bool) ? (y z : C++Type) ? > MappedReferenceType x v ? y ? StrippedConversionType x v ? z ? y ? z ? ? > ... > f12 ? x???????????? ?? true? .(remove-const ? x ??) .(remove-const ? x > ??) refl refl refl = {!? !} > f12 ? x &?????????? ?? false .(? x &? ??) .(? x &??????????? ??) refl > refl refl = {!? !} > f12 ? x &?????????? ?? false .(? x &? ??) .(? x????????????? ??) refl > refl ()??????????? -- ? case > f12 ? (x const?) &? ?? false .(? (x const?) &? ??) .(? (x const?) &?? > ??) refl refl refl = {!? !} > f12 ? (x const?) &? ?? false .(? (x const?) &? ??) .(? x????????????? > ??) refl refl ()??????????? -- ? case > f12 ? x &&????????? ?? false .(? x &&?????????? ??) .(? x &&?????????? > ??) refl refl refl = {!? !} > ... Regards, Christian -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Thu Mar 14 09:09:14 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Thu, 14 Mar 2019 10:09:14 +0200 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: References: Message-ID: Marcus, I could not follow your example, but it seems that you are trying to case split a function, which is not possible. ``` open import Relation.Binary.PropositionalEquality open import Data.Nat open import Data.Empty open import Relation.Nullary fun : ? (2 ? 2) ? ? fun ?x = ? -- ?-elim (?x refl) ``` On Thu, Mar 14, 2019 at 9:15 AM Marcus Christian Lehmann < lehmann at tet.tu-berlin.de> wrote: > Hello Agda Community, > > The case-split C-c on proof of ? works great and even leaves out > impossible cases. But for case-splits of proofs of it's negation ? I get > > Cannot split on argument of non-datatype ? x? ?? ? ? x? ?? when checking > that the expression ? has type ? > > Is there a nice way to have case-split work for these cases (i.e. on ?() )? > > I could only come up with manually providing "inequality evidence" for my > (mutual) datatypes by writing out all unequal combinations of the > constructors but the performance is horrible and the case split is really > awful. > > My context is, that for a function > > MappedReferenceType : C++Type ? Bool ? C++Type > ... > > its effect on such C++Type is computed by the case-generation > > f3 : (x : C++Type) ? (v : Bool) ? (y : C++Type) ? MappedReferenceType x v > ? y ? ? > f3 x v y p = ? > > where I can split with C-c on x v p simultaneously, and then eliminate > with four further splits on x all occurences of > > f3 : (x : C++Type) ? (v : Bool) ? (y : C++Type) ? MappedReferenceType x v > ? y ? ? > ... > f3 ? x &? ?? true .(? x &? ??) refl = tt > f3 ? x &? ?? true .(? x &? ??) refl = tt > f3 ? (x const?) &? ?? true .(? x ??) refl = tt > f3 ? (x const?) &? ?? true .(? x ??) refl = tt > f3 ? x &&? ?? true .(? x &&? ??) refl = tt > ... > > Now for observing where two functions "differ", I currently "create" the ? > cases as the absurd ones from ? > > f12 : (x : C++Type) ? (v : Bool) ? (y z : C++Type) ? MappedReferenceType x > v ? y ? StrippedConversionType x v ? z ? y ? z ? ? > ... > f12 ? x ?? true .(remove-const ? x ??) .(remove-const ? x ??) > refl refl refl = {! !} > f12 ? x &? ?? false .(? x &? ??) .(? x &? ??) > refl refl refl = {! !} > f12 ? x &? ?? false .(? x &? ??) .(? x ??) > refl refl () -- ? case > f12 ? (x const?) &? ?? false .(? (x const?) &? ??) .(? (x const?) &? ??) > refl refl refl = {! !} > f12 ? (x const?) &? ?? false .(? (x const?) &? ??) .(? x ??) > refl refl () -- ? case > f12 ? x &&? ?? false .(? x &&? ??) .(? x &&? ??) > refl refl refl = {! !} > ... > > Regards, > > Christian > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From lehmann at tet.tu-berlin.de Thu Mar 14 17:36:16 2019 From: lehmann at tet.tu-berlin.de (Marcus Christian Lehmann) Date: Thu, 14 Mar 2019 17:36:16 +0100 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: References: Message-ID: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> I have attached a more complete example but it boils down to convincing Agda that ? 2 ? 2 should be empty (following the very readable error message), e.g. ``` fun : ? (2 ? 2) ? ? fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to me" ``` Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: > Marcus, I could not follow your example, but it seems that you are > trying to case split a function, which is not possible. > > ``` > open import Relation.Binary.PropositionalEquality > open import Data.Nat > open import Data.Empty > open import Relation.Nullary > > > fun : ? (2 ? 2) ? ? > fun ?x =? ? -- ?-elim (?x refl) > > ``` -------------- next part -------------- module CaseSplit where open import Data.Nat open import Data.Unit open import Data.Empty open import Relation.Binary.PropositionalEquality open import Relation.Nullary open import Data.Sum open import Data.Product -- (Agda translation from application -- example) data Tree : Set where one : ? ? Tree two : ? ? ? ? Tree three : ? ? ? ? Tree ? Tree -- (Agda translation from application -- example) f : Tree ? Tree f (one x) = one x -- identity f (two zero x) = one x -- different case f (two x@(suc _) y) = two x y -- identity f x = x -- identity -- this reproduces the definition of f, but becomes interesting for composed functions f-map1 : (x : Tree) ? (y : Tree) ? f x ? y ? ? -- f-map1 x y p = ? -- split on x p f-map1 (one x) .(one x) refl = tt f-map1 (two zero x?) .(one x?) refl = tt f-map1 (two (suc x) x?) .(two (suc x) x?) refl = tt f-map1 (three x x? x?) .(three x x? x?) refl = tt g : Tree ? Tree g x = x -- identity, just for the example -- trying to observe, where f and g "differ" f-map2 : (x : Tree) ? (u : Tree) ? (v : Tree) ? f x ? u ? g x ? v ? u ? v ? ? -- f-map2 x u v pu pv p = ? -- split on x pu pv f-map2 (one x) .(one x) .(one x) refl refl refl = tt -- splits on p -- f-map2 (two x x?) .(f (two x x?)) .(two x x?) refl refl p = {! !} -- refuses to split on p, so split on x again f-map2 (two zero x?) .(one x?) .(two 0 x?) refl refl () f-map2 (two (suc x) x?) .(two (suc x) x?) .(two (suc x) x?) refl refl refl = tt f-map2 (three x x? x?) .(three x x? x?) .(three x x? x?) refl refl refl = tt -- also splits on p -- using the observation (absurd cases of f-map2) to come up with theorems thm1 : ? x ? f (two zero x) ? g (two zero x) thm1 x = ? () -- knowing all absurd cases to come up with -- "f and g behave equally on all x, except when `x ? two zero u` for some u" thm2 : ? x ? f x ? g x ? ?[ u ] (x ? two zero u ? f (two zero u) ? g (two zero u) ) -- proof works completely with C-c C-a thm2 (one x) = inj? refl thm2 (two zero x?) = inj? (x? , refl , (? ())) thm2 (two (suc x) x?) = inj? refl thm2 (three x x? x?) = inj? refl -- using ? directly to observe these cases f-map3 : (x : Tree) ? (u : Tree) ? (v : Tree) ? f x ? u ? g x ? v ? u ? v ? ? -- f-map3 x u v pu pv p = ? -- split on x pu pv f-map3 (one x) .(one x) .(one x) refl refl p = p refl f-map3 (two zero x?) .(one x?) .(two 0 x?) refl refl p = {! !} -- impossible to create "one x? ? two 0 x?" f-map3 (two (suc x) x?) .(two (suc x) x?) .(two (suc x) x?) refl refl p = p refl f-map3 (three x x? x?) .(three x x? x?) .(three x x? x?) refl refl p = p refl -- this might produce false positives, because "tt" is always accepted, where "?-elim (p refl)" only in the (now) absurd cases f-map4 : (x : Tree) ? (u : Tree) ? (v : Tree) ? f x ? u ? g x ? v ? u ? v ? ? -- f-map4 x u v pu pv p = ? -- split on x pu pv f-map4 (one x) .(one x) .(one x) refl refl p = ?-elim (p refl) f-map4 (two zero x?) .(one x?) .(two 0 x?) refl refl p = tt -- ?-elim (p refl) is not accepted (no refl for "one x? ? two 0 x?") f-map4 (two (suc x) x?) .(two (suc x) x?) .(two (suc x) x?) refl refl p = ?-elim (p refl) f-map4 (three x x? x?) .(three x x? x?) .(three x x? x?) refl refl p = ?-elim (p refl) -- Wished this one f-map5 : (x : Tree) ? (u : Tree) ? (v : Tree) ? f x ? u ? g x ? v ? u ? v ? ? f-map5 (one x) .(one x) .(one x) refl refl () -- ? Error: "one x ? one x should be empty, but that's not obvious to me" f-map5 (two zero x?) .(one x?) .(two 0 x?) refl refl p = tt f-map5 (two (suc x) x?) .(two (suc x) x?) .(two (suc x) x?) refl refl () -- ? Error: "two (suc x) x? ? two (suc x) x? should be empty, but that's not obvious to me" f-map5 (three x x? x?) .(three x x? x?) .(three x x? x?) refl refl () -- ? Error: "three x x? x? ? three x x? x? should be empty, but that's not obvious to me" From fdhzs2010 at hotmail.com Thu Mar 14 17:42:28 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Thu, 14 Mar 2019 16:42:28 +0000 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> References: , <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> Message-ID: Hi Marcus, you shouldn't expect to be able to pattern match on functions in regular type theory based on intuitionistic type theory. negation is a function so it should be applied to something. Sincerely Yours, Jason Hu ________________________________ From: Agda on behalf of Marcus Christian Lehmann Sent: March 14, 2019 12:36 PM To: Apostolis Xekoukoulotakis Cc: agda list Subject: Re: [Agda] Case split on ?() I have attached a more complete example but it boils down to convincing Agda that ? 2 ? 2 should be empty (following the very readable error message), e.g. ``` fun : ? (2 ? 2) ? ? fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to me" ``` Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: > Marcus, I could not follow your example, but it seems that you are > trying to case split a function, which is not possible. > > ``` > open import Relation.Binary.PropositionalEquality > open import Data.Nat > open import Data.Empty > open import Relation.Nullary > > > fun : ? (2 ? 2) ? ? > fun ?x = ? -- ?-elim (?x refl) > > ``` -------------- next part -------------- An HTML attachment was scrubbed... URL: From lehmann at tet.tu-berlin.de Thu Mar 14 21:09:05 2019 From: lehmann at tet.tu-berlin.de (Marcus Christian Lehmann) Date: Thu, 14 Mar 2019 21:09:05 +0100 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> Message-ID: <18a42b30-b714-fe82-9983-45716c9c9fa9@tet.tu-berlin.de> Thank you for pointing this dead-end out. Therefore I will proceed with f : ? x u v ? f x ? u ? g x ? v ? u ? v ? u ? v f x u v p1 p2 = ? where proof search seems mighty enough to figure out "inj? refl" or "inj? (? ())" for the right hand side (after case splitting on x). regards, Am 14.03.19 um 17:42 schrieb Jason -Zhong Sheng- Hu: > Hi Marcus, > > you shouldn't expect to be able to pattern match on functions in > regular type theory based on intuitionistic type theory. > > negation is a function so it should be applied to something. > > *Sincerely Yours, > * > * > Jason Hu* > ------------------------------------------------------------------------ > *From:* Agda on behalf of Marcus > Christian Lehmann > *Sent:* March 14, 2019 12:36 PM > *To:* Apostolis Xekoukoulotakis > *Cc:* agda list > *Subject:* Re: [Agda] Case split on ?() > I have attached a more complete example but it boils down to convincing > Agda that ? 2 ? 2 should be empty (following the very readable error > message), e.g. > > ``` > fun : ? (2 ? 2) ? ? > fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to me" > ``` > > > Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: > > Marcus, I could not follow your example, but it seems that you are > > trying to case split a function, which is not possible. > > > > ``` > > open import Relation.Binary.PropositionalEquality > > open import Data.Nat > > open import Data.Empty > > open import Relation.Nullary > > > > > > fun : ? (2 ? 2) ? ? > > fun ?x =? ? -- ?-elim (?x refl) > > > > ``` > -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Thu Mar 14 21:15:56 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Thu, 14 Mar 2019 20:15:56 +0000 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <20190314200906.AADAB3894A_C8AB4E2B@SPMA-02.tubit.win.tu-berlin.de> References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> , <20190314200906.AADAB3894A_C8AB4E2B@SPMA-02.tubit.win.tu-berlin.de> Message-ID: Hi Marcus, this signature looks simply a decision procedure for propositional equality between u and v, and if agda is able to figure out the proof term, I even speculate that u and v are of an inductively defined type. If that's the case, why did you involve f and g? it might hint that it's not the signature that you might be looking for, or you are complicating a simple problem. Sincerely Yours, Jason Hu ________________________________ From: Marcus Christian Lehmann Sent: March 14, 2019 4:09 PM To: Jason -Zhong Sheng- Hu; Apostolis Xekoukoulotakis Cc: agda list Subject: Re: [Agda] Case split on ?() Thank you for pointing this dead-end out. Therefore I will proceed with f : ? x u v ? f x ? u ? g x ? v ? u ? v ? u ? v f x u v p1 p2 = ? where proof search seems mighty enough to figure out "inj? refl" or "inj? (? ())" for the right hand side (after case splitting on x). regards, Am 14.03.19 um 17:42 schrieb Jason -Zhong Sheng- Hu: Hi Marcus, you shouldn't expect to be able to pattern match on functions in regular type theory based on intuitionistic type theory. negation is a function so it should be applied to something. Sincerely Yours, Jason Hu ________________________________ From: Agda on behalf of Marcus Christian Lehmann Sent: March 14, 2019 12:36 PM To: Apostolis Xekoukoulotakis Cc: agda list Subject: Re: [Agda] Case split on ?() I have attached a more complete example but it boils down to convincing Agda that ? 2 ? 2 should be empty (following the very readable error message), e.g. ``` fun : ? (2 ? 2) ? ? fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to me" ``` Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: > Marcus, I could not follow your example, but it seems that you are > trying to case split a function, which is not possible. > > ``` > open import Relation.Binary.PropositionalEquality > open import Data.Nat > open import Data.Empty > open import Relation.Nullary > > > fun : ? (2 ? 2) ? ? > fun ?x = ? -- ?-elim (?x refl) > > ``` -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Thu Mar 14 21:33:37 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Thu, 14 Mar 2019 20:33:37 +0000 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> Message-ID: <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> On 14/03/2019 16:36, lehmann at tet.tu-berlin.de wrote: > convincing Agda that ? 2 ? 2 should be empty I am not going to give a solution in Agda. Instead, I will try to guide you. * The type `2 ? 2` has an inhabitant. (By definition of `?`.) * To say that a type `X` is empty amounts to saying that we have an inhabitant of `? X`. That is, that you have a function X ? R where R is the empty type. * So you are trying to show that `?(? 2 ? 2)` has an inhabitant. * But for any type `A`, if `A` has an inhabitant, then so does `??A`. If you are a logician, you know that. If you are a functional programmer, what you are trying to do is from an inhabitant of the type `A` to get an inhabitant of the type `(A ? R) ? R`, where `R` is the empty type. But this can actually be done for an arbitrary type `R`, not just the empty type. It is the evaluation map. * Now if you read "`? (2 ? 2)` is empty" as `(2 ? 2 ? R) ? R` for `R` the empty type, you are done. I hope this helps. Pattern matching is not what is needed here. Martin > > ``` > fun : ? (2 ? 2) ? ? > fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to me" > ``` > > > Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: >> Marcus, I could not follow your example, but it seems that you are >> trying to case split a function, which is not possible. >> >> ``` >> open import Relation.Binary.PropositionalEquality >> open import Data.Nat >> open import Data.Empty >> open import Relation.Nullary >> >> >> fun : ? (2 ? 2) ? ? >> fun ?x = ? -- ?-elim (?x refl) >> >> ``` > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From lehmann at tet.tu-berlin.de Thu Mar 14 21:36:05 2019 From: lehmann at tet.tu-berlin.de (Marcus Christian Lehmann) Date: Thu, 14 Mar 2019 21:36:05 +0100 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> <20190314200906.AADAB3894A_C8AB4E2B@SPMA-02.tubit.win.tu-berlin.de> Message-ID: Hi Jason, Yes, you are right about that. I have an inductively defined type (mimicking a part of the C++ type system) which is quite simple. Now the C++ templates (type-level functions) allow overlapping patterns in a way that Agda also does and a translation even of a complicated C++ template to Agda works quite good. For a bunch of these templates, which are composed out of other ones, I am interested in their "effect" and I (misuse?) Agda to generate all these cases. That is, for a from-C++-translated f with overlapping patterns and another from-C++-translated g with similar but different overlapping pattern, it is of very great use to have Agda deciding the cases where they differ. These templates are so awfully to debug just in C++ and even just this automatic decision in Agda aids a lot. It looks like this: data FundT : Set where ? void?????????????????? : FundT ?? ? a long list ? unsigned_long_long_int : FundT data BasicT : Set where ? class : BasicT ? fund : FundT ? BasicT mutual ? data PointerT : Set where ??? _*? : BasicT?? ? PointerT ??? _*? : PointerT ? PointerT ??? _*? : ConstT?? ? PointerT ? data ConstT : Set where ??? _const? : BasicT ? ConstT ??? _const? : PointerT ? ConstT data RefT : Set where ? _&?? : BasicT?? ? RefT ? _&?? : PointerT ? RefT ? _&?? : ConstT?? ? RefT ? _&&? : BasicT?? ? RefT ? _&&? : PointerT ? RefT ? _&&? : ConstT?? ? RefT data C++Type : Set where ? ?_?? : BasicT?? ? C++Type ? ?_?? : PointerT ? C++Type ? ?_?? : ConstT?? ? C++Type ? ?_?? : RefT???? ? C++Type -- translated from C++ remove-const : C++Type ? C++Type remove-const ? x const? ?? = ? x ?? remove-const ? x const? ?? = ? x ?? remove-const x = x -- translated from C++ f : C++Type ? Bool ? C++Type f ? x &? ?? v = ? x &? ?? f ? x &? ?? v = ? x &? ?? f ? (x const?) &? ?? true = ? x ?? f ? (x const?) &? ?? true = ? x ?? f ? x &? ?? false = ? x &? ?? f x v = remove-const x -- translated from C++ g : C++Type ? Bool ? C++Type g ? x &? ?? v = ? x ?? g ? (x const?) &? ?? v = ? x ?? g x v = f x v -- uses f for the default case regards Am 14.03.19 um 21:15 schrieb Jason -Zhong Sheng- Hu: > Hi Marcus, > > this signature looks simply a decision procedure for propositional > equality between u and v, and if agda is able to figure out the proof > term, I even speculate that u and v are of an inductively defined > type. If that's the case, why did you involve f and g? it might hint > that it's not the signature that you might be looking for, or you are > complicating a simple problem. > -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Thu Mar 14 23:39:42 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Thu, 14 Mar 2019 22:39:42 +0000 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> Message-ID: <4b93f2ea-60cb-5c98-373b-4bf8924fd7bb@cs.bham.ac.uk> Let me give a complete example of this situation written in Agda, without solving your specific problem (deliberately), in a self-contained way: ---- data _?_ {X : Set} : X ? X ? Set where refl : (x : X) ? x ? x data ? : Set where ?-induction : (A : ? ? Set) ? (x : ?) ? A x ?-induction A () -- The above should be the only place you would ever *need* to use the -- () pattern, as Martin-L?f type theory teaches us. -- Even better, if the data definition of the empty type ? has zero -- constructors, then ?-induction should be defined by zero -- equations in an ideal world. ?-recursion : (B : Set) ? ? ? B ?-recursion B = ?-induction (? (_ : ?) ? B) ? : Set ? Set ? X = X ? ? -- Example of how the pattern () can be avoided once we have -- ?-induction: data Colour : Set where Black White : Colour not-black-is-white : (c : Colour) ? ? (c ? Black) ? c ? White not-black-is-white Black f = ?-recursion (Black ? White) (f (refl Black)) not-black-is-white White f = refl White -- Here f : c ? Black ? ?. -- We don't pattern match on f, because it is a function. We use it. -- To use it, we have to apply it to an argument. Once we have the -- argument available, we get a mythical element of ?, with which we -- can do anything we like, using ?-recursion. ---- Martin On 14/03/2019 20:33, Martin Escardo wrote: > > > On 14/03/2019 16:36, lehmann at tet.tu-berlin.de wrote: >> convincing Agda that ? 2 ? 2 should be empty > > I am not going to give a solution in Agda. Instead, I will try to guide > you. > > * The type `2 ? 2` has an inhabitant. (By definition of `?`.) > > * To say that a type `X` is empty amounts to saying that we have an > inhabitant of `? X`. > > That is, that you have a function X ? R where R is the empty type. > > * So you are trying to show that `?(? 2 ? 2)` has an inhabitant. > > * But for any type `A`, if `A` has an inhabitant, then so does `??A`. > > If you are a logician, you know that. > > If you are a functional programmer, what you are trying to do is > from an inhabitant of the type `A` to get an inhabitant of the type > `(A ? R) ? R`, where `R` is the empty type. > > But this can actually be done for an arbitrary type `R`, not just > the empty type. It is the evaluation map. > > * Now if you read "`? (2 ? 2)` is empty" as `(2 ? 2 ? R) ? R` for `R` > the empty type, you are done. > > I hope this helps. Pattern matching is not what is needed here. > > Martin > > > >> >> ``` >> fun : ? (2 ? 2) ? ? >> fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to me" >> ``` >> >> >> Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: >>> Marcus, I could not follow your example, but it seems that you are >>> trying to case split a function, which is not possible. >>> >>> ``` >>> open import Relation.Binary.PropositionalEquality >>> open import Data.Nat >>> open import Data.Empty >>> open import Relation.Nullary >>> >>> >>> fun : ? (2 ? 2) ? ? >>> fun ?x = ? -- ?-elim (?x refl) >>> >>> ``` >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > -- > Martin Escardo > http://www.cs.bham.ac.uk/~mhe > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From lehmann at tet.tu-berlin.de Fri Mar 15 02:27:28 2019 From: lehmann at tet.tu-berlin.de (Marcus Christian Lehmann) Date: Fri, 15 Mar 2019 02:27:28 +0100 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <4b93f2ea-60cb-5c98-373b-4bf8924fd7bb@cs.bham.ac.uk> References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> <4b93f2ea-60cb-5c98-373b-4bf8924fd7bb@cs.bham.ac.uk> Message-ID: Hello Martin, Thank you for the guidance and once more for the comprehensive example! I'll try to turn them into progress: To convince Agda, that ?( 2 ? 2 ) is empty "is" to get > thm : ?( 2 ? 2 ) ? ? > thm p = p (refl 2) type checked. Applying this to the concrete problem, my line of thought is the following: For two functions f and g of type B ? B, the type of all choices that "make f and g differ" I think of as ?[ x ? B ] ?(P x) where ??? P : A ? Set ??? P x = f x ? g x and when explicitly constructing such pair x1 : ?[ x ? B ] ?(P x) x1 = ?some-construction? , (? ()) it is impossible to give a construction where P x holds, because then it'd be impossible to give (? ()) accepted for ?(P x). But now, when this becomes an assumption, so we receive an hypothetical inhabitant of this type "?[ x ? B ] ?(P x)" as in thm : ?[ x ? B ] ?(P x) ? ? thm (x , ?p) = ? then (when we are in the hole `?`) there "are" hypothetical inhabitants? x : B and ?p : ?(P x) available. We might split x into it's constructors over and over. And cases may occur where in their holes `?` it is possible to construct an inhabitant refl : P x out of the given, hypothetical inhabitants. Then these cases should not matter at all: it is impossible to give an actual inhabitant of "?[ x ? B ] ?(P x) " that would make such construction possible. I am sorry about wrong terminology, when referring to this as an "uninhabitated case"; and grateful for every correction. From your example I get a more detailed understanding of where Data.Empty.?-elim is rooted (in ?-recursion) and when filling such uninhabitated holes, I understand ?-elim (?p refl) as giving "nothing, but of the right type". Now if we assume that I may just not see refl : P x being constructable in such case's hole `?`, then I would not notice that this is an uninhabitated case. I understand that my not-noticing is perfectly fine, and the construction I might come up without ?-elim will never occur on an actual inhabitant of ?[ x ? B ] ?(P x). So I think "having" a mystical inhabitant? of ? / ? as "currently deriving in an unreachable case" (every time ? occurs as a hypothesis). The goal `? ? ?` in my signature makes `thm` trivial. Even in an uninhabitated case one can give tt : ? without the necessity of using ?-recursion / ?-elim. But with a non-trivial goal, one might has no other choice to obtain the right type for the goal. Similarly I would think that every time ?-elim / ?-recursion is used, the case is also uninhabitated anyways. I guess the more proper question is: how to enumerate (or just "observe") all inhabitated cases of a theorem (function)? (And is that even a sound thing to ask?) I know that the compactness of that, i.e the amount of cases, depends on how clever x is split with regard to f and g.? And I might want to split often enough to eliminate f and g, for which they better not be recursive. So it might be an approach from a wrong direction, but to obtain this information, I tried to come up with a proper function signature and "look" at the cases to figure out whether they are inhabitated. My current understanding is that for a case-split Agda expands all the constructors and removes every case that is rendered impossible by unification (e.g. when an inhabitant of ? was deduced). So I think, when one is really up for "eliminating" a case, in a way that we will not end up "implementing" it, then a signature needs to be set up that puts an impossible constraint in the assumptions of a function, but just in that case. It was puzzling me a day how to achieve this for ? and whether it can be done at all. Again, thank you for providing the insights: they aid a lot for reviewing literature and experimenting with Agda. regards, Am 14.03.19 um 23:39 schrieb Martin Escardo: > > Let me give a complete example of this situation written in Agda, > without solving your specific problem (deliberately), in a > self-contained way: > > ---- > data _?_ {X : Set} : X ? X ? Set where > ? refl : (x : X) ? x ? x > > data ? : Set where > > ?-induction : (A : ? ? Set) ? (x : ?) ? A x > ?-induction A () > > -- The above should be the only place you would ever *need* to use the > -- () pattern, as Martin-L?f type theory teaches us. > > -- Even better, if the data definition of the empty type ? has zero > -- constructors, then ?-induction should be defined by zero > -- equations in an ideal world. > > ?-recursion : (B : Set) ? ? ? B > ?-recursion B = ?-induction (? (_ : ?) ? B) > > ? : Set ? Set > ? X = X ? ? > > -- Example of how the pattern () can be avoided once we have > -- ?-induction: > > data Colour : Set where > ?Black White : Colour > > not-black-is-white : (c : Colour) ? ? (c ? Black) ? c ? White > not-black-is-white Black f = ?-recursion (Black ? White) (f (refl > Black)) > not-black-is-white White f = refl White > > -- Here f : c ? Black ? ?. > > -- We don't pattern match on f, because it is a function.? We use it. > -- To use it, we have to apply it to an argument.? Once we have the > -- argument available, we get a mythical element of ?, with which we > -- can do anything we like, using ?-recursion. > ---- > Martin > > On 14/03/2019 20:33, Martin Escardo wrote: >> >> >> On 14/03/2019 16:36, lehmann at tet.tu-berlin.de wrote: >>> convincing Agda that ? 2 ? 2 should be empty >> >> I am not going to give a solution in Agda. Instead, I will try to guide >> you. >> >> ? * The type `2 ? 2` has an inhabitant. (By definition of `?`.) >> >> ? * To say that a type `X` is empty amounts to saying that we have an >> ??? inhabitant of `? X`. >> >> ??? That is, that you have a function X ? R where R is the empty type. >> >> ? * So you are trying to show that `?(? 2 ? 2)` has an inhabitant. >> >> ? * But for any type `A`, if `A` has an inhabitant, then so does `??A`. >> >> ??? If you are a logician, you know that. >> >> ??? If you are a functional programmer, what you are trying to do is >> ??? from an inhabitant of the type `A` to get an inhabitant of the type >> ??? `(A ? R) ? R`, where `R` is the empty type. >> >> ??? But this can actually be done for an arbitrary type `R`, not just >> ??? the empty type. It is the evaluation map. >> >> ? * Now if you read "`? (2 ? 2)` is empty" as `(2 ? 2 ? R) ? R` for `R` >> ??? the empty type, you are done. >> >> I hope this helps. Pattern matching is not what is needed here. >> >> Martin >> >> >> >>> >>> ``` >>> fun : ? (2 ? 2) ? ? >>> fun () -- Error: "? 2 ? 2 should be empty, but that's not obvious to >>> me" >>> ``` >>> >>> >>> Am 14.03.19 um 09:09 schrieb Apostolis Xekoukoulotakis: >>>> Marcus, I could not follow your example, but it seems that you are >>>> trying to case split a function, which is not possible. >>>> >>>> ``` >>>> open import Relation.Binary.PropositionalEquality >>>> open import Data.Nat >>>> open import Data.Empty >>>> open import Relation.Nullary >>>> >>>> >>>> fun : ? (2 ? 2) ? ? >>>> fun ?x =? ? -- ?-elim (?x refl) >>>> >>>> ``` >>> >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> >> -- >> Martin Escardo >> http://www.cs.bham.ac.uk/~mhe >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > -- > Martin Escardo > http://www.cs.bham.ac.uk/~mhe -- Marcus Christian Lehmann, M.Sc. Research Associate Technische Universit?t Berlin Institute of High-Frequency and Semiconductor System Technologies Faculty IV ? Electrical Engineering and Computer Science Department Theoretische Elektrotechnik Secretariat EN 2 Einsteinufer 17 D-10587 Berlin Germany Phone: +49 (30) 314-21363 Mail:lehmann at tet.tu-berlin.de From m.escardo at cs.bham.ac.uk Fri Mar 15 07:55:59 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 15 Mar 2019 06:55:59 +0000 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> <4b93f2ea-60cb-5c98-373b-4bf8924fd7bb@cs.bham.ac.uk> Message-ID: <5598ca08-26a1-2a72-17f1-84223569a154@cs.bham.ac.uk> On 15/03/2019 01:27, lehmann at tet.tu-berlin.de wrote: > So I think "having" a mystical inhabitant of ? / ? as "currently > deriving in an unreachable case" (every time ? occurs as a hypothesis). Yes, unreachable case is right. A mathematician would say, in such a situation, "suppose, for the sake of contradiction, a hypothetical unicorn is given". (I had said "mythical" in my message. :-) ) Hypothetical things that don't necessarily actually exist happen often, even without an explicit mention of an empty type or negation, because it is very easy to get a type depending on a parameter that happens to be empty for some values of the parameters. And this is the whole point of predicates, of course. Because you mentioned ?, here is a common example that doesn't involve any explicit negation. Suppose for a given function f : ? ? ?, you want to show that if there is n : ? with f n ? 0, then there is a minimal n with f n ? 0. So you want to show that (f : ? ? ?) ? (?[ n ? ? ] (f n ? 0)) ? (?[ n' ? ? ] (f n' ? 0) ? ((k : ?) ? f k ? 0 ? n' ? k)) (I apologize I don't know the notation of the standard library.) The type (?[ n ? ? ] (f n ? 0)) will be empty for a lot of f's, but its emptiness is not decidable in general. But it is perfectly legitimate to assume a given hypothetical element (n , p) of this type, and then compute, by search bounded by the given n, the required output data (n' , p' , ?). When you try to run this program/proof for an f for which the type (?[ n ? ? ] (f n ? 0)) happens to be empty, you won't be able to produce a suitable *actual* input to even invoke the program. The whole program becomes unreachable in your terminology. So when you use programs, you have to supply actual data, but when you write these programs, you work with hypothetical data (aka "formal parameters" in programming). Martin From R.T.A.Aarssen at cwi.nl Fri Mar 15 12:48:02 2019 From: R.T.A.Aarssen at cwi.nl (Rodin Aarssen) Date: Fri, 15 Mar 2019 12:48:02 +0100 (CET) Subject: [Agda] GPCE 2019: 1st Call for Papers - Athens, Greece; October 21-22 Message-ID: <1586621466.2502098.1552650482738.JavaMail.zimbra@cwi.nl> CALL FOR PAPERS 18th International Conference on Generative Programming: Concepts & Experiences (GPCE 2019) October 21-22, 2019 Athens, Greece (co-located with SPLASH 2019) https://conf.researchr.org/home/gpce-2019 http://twitter.com/GPCECONF http://www.facebook.com/GPCEConference IMPORTANT DATES * Submission of abstracts: June 14, 2019 * Submission of papers: June 21, 2019 * Paper notification: August 9, 2019 Submission site: https://gpce19.hotcrp.com/ -------------------------------------------------------------------------- SCOPE GPCE is a venue for researchers and practitioners interested in techniques and tools for code generation, language implementation, and metaprogramming. GPCE seeks conceptual, theoretical, empirical, and technical contributions to its topics of interest, which include but are not limited to: * program transformation, staging, macro systems, preprocessors, program synthesis, and code-recommendation systems, * domain-specific languages, language embedding, language design, and language workbenches, * feature-oriented programming, domain engineering, and feature interactions, * applications and properties of code generation, language implementation, and product-line development. Authors are welcome to check with the program co-chairs whether their planned papers are in scope. PAPER SELECTION The GPCE program committee will evaluate each submission according to the following selection criteria: * Novelty. Papers must present new ideas or evidence and place them appropriately within the context established by previous research in the field. * Significance. The results in the paper must have the potential to add to the state of the art or practice in significant ways. * Evidence. The paper must present evidence supporting its claims. Examples of evidence include formalizations and proofs, implemented systems, experimental results, statistical analyses, and case studies. * Clarity. The paper must present its contributions and results clearly. PAPER CATEGORIES GPCE solicits three kinds of submissions. * Full Papers reporting original and unpublished results of research that contribute to scientific knowledge in any GPCE topic listed above. Full paper submissions must not exceed 12 pages excluding bibliography. * Short Papers presenting unconventional ideas or visions about any GPCE topic listed above. Short papers do not always require complete results as in the case of a full paper. In this way, authors can introduce new ideas to the community and get early feedback. Please note that short papers are not intended to be position statements. Short papers are included in the proceedings and will be presented at the conference. Short paper submissions must not exceed 6 pages excluding bibliography. * Tool Demonstrations presenting tools for any GPCE topic listed above. Tools must be available for use and must not be purely commercial. Submissions must provide a tool description not exceeding 6 pages excluding bibliography and a separate demonstration outline including screenshots also not exceeding 6 pages. Tool demonstrations must have the keywords "Tool Demo" or "Tool Demonstration" in their title. If the submission is accepted, the tool description will be published in the proceedings. The demonstration outline will only be used by the program committee for evaluating the submission. PAPER SUBMISSION All submissions must use the ACM SIGPLAN Conference Format "acmart", using the "sigplan" sub-format, and 10 point font. Additional details and links to templates and the LaTeX class file can be found on the conference web site: https://conf.researchr.org/home/gpce-2019. To increase fairness in reviewing, a double-blind review process has become standard across SIGPLAN conferences. GPCE will follow a very lightweight model, where author identities are revealed to reviewers after submitting their initial reviews. Hence, the purpose is not to conceal author identities at all cost, but merely to provide reviewers with an unbiased first look at a submission. Author names and institutions should be omitted from submitted papers, and references to the authors' own related work should be in the third person. No other changes are necessary, and authors will not be penalized if reviewers are able to infer their identities in implicit ways. Papers must be submitted using HotCRP: https://gpce19.hotcrp.com/ For additional information, clarification, or answers to questions please contact the program co-chairs. ORGANIZATION Chairs * General chair: Ina Schaefer (TU Braunschweig) * Program co-chair: Christoph Reichenbach (Lund University) * Program co-chair: Tijs van der Storm (CWI / University of Groningen) Program Committee * Jonathan Aldrich (CMU) * Juliana Alves Pereira (University Rennes) * Marsha Chechik (University of Toronto) * Shigeru Chiba (University of Tokyo) * Thomas Degueule (CWI) * Sebastian Erdweg (TU Delft) * Matthew Flatt (University of Utah) * Robert Gl?ck (University of Copenhagen) * Elisa Gonzalez Boix (VUB) * Geoffrey Mainland (Drexel University) * Chris Martens (NCSU) * Maryam Mehri Dehnavi (University of Toronto) * Peter Mosses (Swansea University / TU Delft) * David Pearce (Victoria University of Wellington) * Alex Potanin (Victoria University of Wellington) * Larissa Rocha Soares (Federal University of Bahia) * Ulrik Schultz (University of Southern Denmark) * Sandro Schulze (University of Magdeburg) * Christoph Seidl (TU Braunschweig) * Michel Steuwer (University of Glasgow) * Sam Tobin Hochstadt (Indiana University) * Kanae Tsushima (National Institute of Informatics) * Philip Wadler (University of Edinburgh) * Eric Walkingshaw (Oregon State University) * Adam Welc (Uber) * Peng Wu (Huawei) From P.Achten at cs.ru.nl Fri Mar 15 13:09:47 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Fri, 15 Mar 2019 13:09:47 +0100 Subject: [Agda] [TFP'19] second call for papers: Trends in Functional Programming 2019, 12-14 June 2019, Vancouver, BC, CA Message-ID: <51889c52-8e46-9e96-9f2b-468e3843e9fd@cs.ru.nl> -------------------------------- 2 N D C A L L F O R P A P E R S -------------------------------- ====== TFP 2019 ====== 20th Symposium on Trends in Functional Programming 12-14 June, 2019 Vancouver, BC, CA https://www.tfp2019.org/index.html == Important Dates == Submission Deadline for pre-symposium formal review Thursday, March 28, 2019 Sumbission Deadline for Draft Papers Thursday, May 9, 2019 Notification for pre-symposium submissions Thursday, May 2, 2019 Notification for Draft Papers Tuesday, May 14, 1029 TFPIE Tuesday, June 11, 2019 Symposium Wednesday, June 12, 2019 ? Friday, June 14, 2019 Notification of Student Paper Feedback Friday June 21, 2019 Submission Deadline for revised Draft Papers (post-symposium formal review) Thursday, August 1, 2019 Notification for post-symposium submissions Thursday, October 24, 2019 Camera Ready Deadline (both pre- and post-symposium) Friday, November 29, 2019 The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions (see below at scope). Please be aware that TFP uses two distinct rounds of submissions (see below at submission details). TFP 2019 will be the main event of a pair of functional programming events. TFP 2019 will be accompanied by the International Workshop on Trends in Functional Programming in Education (TFPIE), which will take place on June 11. == Scope == The symposium recognizes that new trends may arise through various routes. As part of the Symposium's focus on trends we therefore identify the following five article categories. High-quality articles are solicited in any of these categories: Research Articles: Leading-edge, previously unpublished research work Position Articles: On what new trends should or should not be Project Articles: Descriptions of recently started new projects Evaluation Articles: What lessons can be drawn from a finished project Overview Articles: Summarizing work with respect to a trendy subject Articles must be original and not simultaneously submitted for publication to any other forum. They may consider any aspect of functional programming: theoretical, implementation-oriented, or experience-oriented. Applications of functional programming techniques to other languages are also within the scope of the symposium. Topics suitable for the symposium include, but are not limited to: Functional programming and multicore/manycore computing Functional programming in the cloud High performance functional computing Extra-functional (behavioural) properties of functional programs Dependently typed functional programming Validation and verification of functional programs Debugging and profiling for functional languages Functional programming in different application areas: security, mobility, telecommunications applications, embedded systems, global computing, grids, etc. Interoperability with imperative programming languages Novel memory management techniques Program analysis and transformation techniques Empirical performance studies Abstract/virtual machines and compilers for functional languages (Embedded) domain specific languages New implementation strategies Any new emerging trend in the functional programming area If you are in doubt on whether your article is within the scope of TFP, please contact the TFP 2019 program chairs, William J. Bowman and Ron Garcia. == Best Paper Awards == To reward excellent contributions, TFP awards a prize for the best paper accepted for the formal proceedings. TFP traditionally pays special attention to research students, acknowledging that students are almost by definition part of new subject trends. A student paper is one for which the authors state that the paper is mainly the work of students, the students are listed as first authors, and a student would present the paper. A prize for the best student paper is awarded each year. In both cases, it is the PC of TFP that awards the prize. In case the best paper happens to be a student paper, that paper will then receive both prizes. == Instructions to Author == Papers must be submitted at: https://easychair.org/conferences/?conf=tfp2019 Authors of papers have the choice of having their contributions formally reviewed either before or after the Symposium. == Pre-symposium formal review == Papers to be formally reviewed before the symposium should be submitted before an early deadline and receive their reviews and notification of acceptance for both presentation and publication before the symposium. A paper that has been rejected in this process may still be accepted for presentation at the symposium, but will not be considered for the post-symposium formal review. == Post-symposium formal review == Papers submitted for post-symposium review (draft papers) will receive minimal reviews and notification of acceptance for presentation at the symposium. Authors of draft papers will be invited to submit revised papers based on the feedback received at the symposium. A post-symposium refereeing process will then select a subset of these articles for formal publication. == Paper categories == There are two types of submission, each of which can be submitted either for pre-symposium or post-symposium review: Extended abstracts. Extended abstracts are 4 to 10 pages in length. Full papers. Full papers are up to 20 pages in length. Each submission also belongs to a category: research position project evaluation overview paper Each submission should clearly indicate to which category it belongs. Additionally, a draft paper submission?of either type (extended abstract or full paper) and any category?can be considered a student paper. A student paper is one for which primary authors are research students and the majority of the work described was carried out by the students. The submission should indicate that it is a student paper. Student papers will receive additional feedback from the PC shortly after the symposium has taken place and before the post-symposium submission deadline. Feedback is only provided for accepted student papers, i.e., papers submitted for presentation and post-symposium formal review that are accepted for presentation. If a student paper is rejected for presentation, then it receives no further feedback and cannot be submitted for post-symposium review. == Format == Papers must be written in English, and written using the LNCS style. For more information about formatting please consult the Springer LNCS web site (http://www.springer.com/lncs). == Program Committee == Program Co-chairs William J. Bowman University of British Columbia Ronald Garcia University of British Columbia Matteo Cimini University of Massachusetts Lowell Ryan Culpepper Czech Technical Institute Joshua Dunfield Queen's University Sam Lindley University of Edinburgh Assia Mahboubi INRIA Nantes Christine Rizkallah University of New South Wales Satnam Singh Google AI Marco T. Moraz?n Seton Hall University John Hughes Chalmers University and Quviq Nicolas Wu University of Bristol Tom Schrijvers KU Leuven Scott Smith Johns Hopkins University Stephanie Balzer Carnegie Mellon University Vikt?ria Zs?k E?tv?s Lor?nd University -------------- next part -------------- An HTML attachment was scrubbed... URL: From asr at eafit.edu.co Fri Mar 15 13:41:32 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Fri, 15 Mar 2019 12:41:32 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 Message-ID: Dear all, The Agda Team is very pleased to announce the first release candidate of Agda 2.6.0. Installation ======= This RC can be installed using the following instructions: $ cabal install https://hackage.haskell.org/package/Agda-2.5.4.2.20190310/candidate/Agda-2.5.4.2.20190310.tar.gz or $ cabal get https://hackage.haskell.org/package/Agda-2.5.4.2.20190310/candidate/Agda-2.5.4.2.20190310.tar.gz $ cd Agda-2.5.4.2.20190310 $ cabal install GHC supported versions =============== This RC has been tested with GHC 8.6.4, 8.4.4, 8.2.2, 8.0.2 and 7.10.3 on Linux, macOS and Windows. Standard library ========== For the time being, you can use the *experimental* branch of the standard library which is compatible with this RC. This branch is available at https://github.com/agda/agda-stdlib/ What is new, fixed issues and incompatibilities ================================ * http://hackage.haskell.org/package/Agda-2.5.4.2.20190310/candidate/changelog * New option `--cubical` to enable support for path equality and related features from Cubical Type Theory (https://arxiv.org/abs/1611.02108), including univalence and higher inductive types. See `Cubical` in the documentation for more info. Enjoy the RC and please test as much as possible. -- Andr?s, on behalf of the Agda Team From mechvel at botik.ru Fri Mar 15 19:09:29 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 15 Mar 2019 21:09:29 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: References: Message-ID: <1552673369.2380.9.camel@one.mechvel.pereslavl.ru> On Fri, 2019-03-15 at 12:41 +0000, Andres Sicard Ramirez wrote: > Dear all, > > The Agda Team is very pleased to announce the first release candidate > of Agda 2.6.0. > [..] I try it on ghc-8.6.3, Ubuntu Linux 18.04. After installing Agda 2.5.4.2.20190310 and master lib of March 15, 2019, I type-check my program with > agda $agdaOpt +RTS -M7G -RTS Binary.agda This leads to the report --------------------------------------------------------------------- Checking Binary (/home/mechvel/inAgda/bfLib/0.01/Binary.agda). Checking Bin.Bin0 (/home/mechvel/inAgda/bfLib/0.01/Bin/Bin0.agda). Checking Level (/home/mechvel/agda/stLib/master-mar15-2019/src/Level.agda). Checking Function (/home/mechvel/agda/stLib/master-mar15-2019/src/Function.agda). Checking Strict (/home/mechvel/agda/stLib/master-mar15-2019/src/Strict.agda). Checking Relation.Nullary (/home/mechvel/agda/stLib/master-mar15-2019/src/Relation/Nullary.agda). Checking Data.Empty (/home/mechvel/agda/stLib/master-mar15-2019/src/Data/Empty.agda). /home/mechvel/agda/stLib/master-mar15-2019/src/Data/Empty.agda:16,1-66 COMPILE pragma not allowed in safe mode. when scope checking the declaration open import Data.Empty hiding (?-elim) --------------------------------------------------------------------- Please, how to fix? ------ Sergei From asr at eafit.edu.co Fri Mar 15 20:06:55 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Fri, 15 Mar 2019 19:06:55 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: <1552673369.2380.9.camel@one.mechvel.pereslavl.ru> References: <1552673369.2380.9.camel@one.mechvel.pereslavl.ru> Message-ID: On Fri, 15 Mar 2019 at 13:09, Sergei Meshveliani wrote: > > I try it on ghc-8.6.3, Ubuntu Linux 18.04. > > After installing Agda 2.5.4.2.20190310 and > master lib of March 15, 2019, Please note you need the *experimental* branch of the standard library with Agda 2.5.4.2.20190310. Best, -- Andr?s From lehmann at tet.tu-berlin.de Fri Mar 15 20:54:08 2019 From: lehmann at tet.tu-berlin.de (Marcus Christian Lehmann) Date: Fri, 15 Mar 2019 20:54:08 +0100 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <5598ca08-26a1-2a72-17f1-84223569a154@cs.bham.ac.uk> References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> <4b93f2ea-60cb-5c98-373b-4bf8924fd7bb@cs.bham.ac.uk> <5598ca08-26a1-2a72-17f1-84223569a154@cs.bham.ac.uk> Message-ID: <668fc5b4-8808-a961-52a9-ee1acfe7cbfc@tet.tu-berlin.de> Am 15.03.19 um 07:55 schrieb Martin Escardo: > (I had said "mythical" in my message. :-) ) That was a subconscious, but revealing confusion. For the example yo gave it is indeed very convincing that the reachability of a case should not be knowable in general (not for ? ? ? with the assumption ?[ n ? ? ] (f n ? 0) because we intuitively know there exist such functions, but when restricted with arbitrary assumptions, yes, this is should not be generally decidable). Then the reachability of RHS for predicates P in ?(f : ? ? ?) ? ?[ x ] (P f x) ? RHS is the ability to give an actual inhabitant of ?[ f ? ? ? ? ] ?[ x ] (P f x) Now I see that even for an inductively defined datatype A this becomes ?[ a ? A ] ?[ x ] (P a x) so when I am able to implement in the other mail ?(a : A) ? ?[ x ] (P a x) ? ?[ x ] ?(P a x) or rather, what I came up with was ?(x : C++Type) ? ?(z : Bool) ? P x z ? ?(P x z) this amounts to the decidability of P. And it seems that? this is what Relation.Nullary.Dec is for. For my application I really can implement (or mostly just choose the case-split and let Agda use its C-c C-a powers) dec-P : ?(x : C++Type) ? ?(z : Bool) ? Dec (P x z) and with absurdify-yes : ?{X : Set} ? Dec X ? Set absurdify-yes (yes p) = ? absurdify-yes (no ?p) = ? the signature cases : ?(x : C++Type) ? ?(z : Bool) ? absurdify-yes(dec-P x z) ? RHS does ()-out (leaves out with () pattern) all the cases where P holds and only the ?P cases remain. Which means that in every such remaining, non-absurd case was "backed" by a (free-variable-)proof of ?P. This is exactly what I was looking for, and I can see why it works in my specific case and how it breaks down in general when dec-P is not implementable (and we have to apply ?p : P ? ? in the RHS with ?-elim / ?-recursion). Well, due to our discussion, not only "reachability" is limited to decidable cases, but even RHS still depends on the "reachability" of ?(x : C++Type) ? ?(z : Bool) so I also see that this is a very limited, if not even misleading, terminology. Thank you for the clarification! regards, From m.escardo at cs.bham.ac.uk Fri Mar 15 22:14:07 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 15 Mar 2019 21:14:07 +0000 Subject: [Agda] =?utf-8?b?Q2FzZSBzcGxpdCBvbiDOuygp?= In-Reply-To: <668fc5b4-8808-a961-52a9-ee1acfe7cbfc@tet.tu-berlin.de> References: <39421625-68e5-f252-2cbd-538b5d718fc8@tet.tu-berlin.de> <57c5c801-ffe3-9e7b-d329-eaa196913636@cs.bham.ac.uk> <4b93f2ea-60cb-5c98-373b-4bf8924fd7bb@cs.bham.ac.uk> <5598ca08-26a1-2a72-17f1-84223569a154@cs.bham.ac.uk> <668fc5b4-8808-a961-52a9-ee1acfe7cbfc@tet.tu-berlin.de> Message-ID: <1b8a1c3d-3d1e-29b2-37ad-3bf4776291d1@cs.bham.ac.uk> On 15/03/2019 19:54, lehmann at tet.tu-berlin.de wrote: > Thank you for the clarification! Glad the discussion helped. People are sometimes surprised that it took a while to invent the number zero. But counting is about establishing bijections, and it may be confusing at first sight to try to establish a bijection between an empty box of pebbles and an empty field of sheep. Martin From matthewdaggitt at gmail.com Sat Mar 16 11:16:03 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sat, 16 Mar 2019 18:16:03 +0800 Subject: [Agda] algebra hierarchy in library In-Reply-To: <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, (I wonder, why people, - and standard library, - call provers solvers). > Unsure. If this is the only reason, then it occurs that `Is' structure is needed > only in few cases. > I think your examples miss the point. For example take any binary operator. That binary operator may form many different Semigroups/Monoids/Groups etc. depending on what the underlying equality is. The `Is` structures allow you to expose which equality you're using at a particular point, whereas your suggestion would hide it. Version II looks more natural to me. But I may be missing something. > To make sure, I could rewrite a part of the library for Version II and > demonstrate. And what if it occurs better? It will be late to consider > for standard. > As I mentioned to you in an issue on Github, non-backwards compatible changes will only be considered where either i) the implementation is incorrect (clearly not the case here) or ii) there's a compelling reason why the current version isn't good enough. "Looking more natural" unfortunately isn't such a reason and as mentioned above Version II doesn't allow you to expose the underlying equality. Best, Matthew On Sat, Mar 9, 2019 at 6:28 PM Sergei Meshveliani wrote: > On Sat, 2019-03-09 at 19:08 +0300, Sergei Meshveliani wrote: > > On Sat, 2019-03-09 at 17:08 +0300, Sergei Meshveliani wrote: > > > On Sat, 2019-03-09 at 14:35 +0300, Sergei Meshveliani wrote: > > > > > > > > > > > If this is the only reason, then it occurs that `Is' structure is > needed > > > > only in few cases. > > > > For example, > > > > (1) There does not exist different semigroups that inherit ("are > over") > > > > the same Magma. The difference can be in a _proof_ for associativity, > > > > but I doubt of whether this feature can be taken here in account. > > > > > > > > Let people correct me if I mistake in the following statements. > > > > > > > > (2) There does not exist different monoids over the same Semigroup. > > > > (3) There does not exist different commutative monoids over the > same > > > > Monoid. > > > > (4) There does not exist different groups over the same Monoid. > > > > (5) There does not exist different Abelian groups over the same > Group. > > > > (6) There does not exist different rings over the same Semiring. > > > > (7) There does not exist different commutative rings over the same > > > > Ring. > > > [..] > > > > > > > > > Sorry for a silly error. I discover a mistake in (2), (4) (6). > > > > > > For example, Nat1 = Nat\0 is a semigroup by _+_, and zero can be > > > joined in different ways, so that (Nat1 U 0) and (Nat1 U 0') occur > > > different monoids. They are isomorphic, but they have different > > > carriers. > > > A similar effect with carrier may be in (4) and (6). > > > > > > So that there remain (1), (3) and (7). > > > > > > No, again an error. > > > > A monoid in _this library_ is on the same carrier C as its inherited > > semigroup. So that to implement a monoid on a given semigroup means to > > choose any e in C which satisfy the law \forall x (e*x == x*e == x) > > and to prove this law. > > And it is proved above that such e is unique. > > > > So, I think that similarly, all the points (1) -- (7) are true > > -- if I am not missing something. > > > > We need one more step towards truth :-) > > Having a Monoid instance, how many different group instances can be > defined on this monoid (hence, on the same carrier C) ? Possible > inversion map on C is unique, as shown in one of previous letters. But > it can be implemented by different algorithms, and this can be used by > programmers. Algorithms matter in the library. And according to Agda, > different algorithms for inversion give different groups. > So that there remain the above statements (1), (3), (7), and may be (2). > > -- > SM > > > > > > > > > > > > > > > > > > > > On Fri, Mar 8, 2019 at 3:00 PM Sergei Meshveliani < > mechvel at botik.ru> > > > > > wrote: > > > > > > > > > > Dear standard library developers and supporters, > > > > > > > > > > can you please answer in (simple words) several questions > > > > > about the > > > > > representation of the algebraic hierarchy in standard > library? > > > > > > > > > > > > > > > 1. Why `Raw' structures? > > > > > > > > > > There are classical generic algebraic structures (call them > > > > > GAS): > > > > > Magma, Semigroup, Monoid, and so on. > > > > > > > > > > Those of them having some new field respectively to > previous > > > > > structures > > > > > are accompanied with the corresponding `Raw' record. For > > > > > example, Magma > > > > > is preceded with RawMagma, Monoid with RawMonoid. Each > `Raw' > > > > > structure > > > > > expresses only the signature of the corresponding GAS. > > > > > > > > > > What the `Raw' structures serve for? > > > > > > > > > > > > > > > 2. Why putting `Is' structures into a different file? > > > > > > > > > > For example, the reader looks into Algebra.agda to find > what > > > > > is > > > > > Semigroup: > > > > > > > > > > ------------------------------------------------------- > > > > > record Semigroup c ? : Set (suc (c ? ?)) where > > > > > ... > > > > > field Carrier : Set c > > > > > _?_ : Rel Carrier ? > > > > > _?_ : Op? Carrier > > > > > isSemigroup : IsSemigroup _?_ _?_ > > > > > > > > > > open IsSemigroup isSemigroup public > > > > > ... > > > > > magma = record { isMagma = isMagma } > > > > > ... > > > > > > > > > > Now, one needs to find a declaration for IsSemigroup. > > > > > And it resides in a different file of > > > > > Algebra/Structures.agda > : > > > > > > > > > > record IsSemigroup (? : Op? A) : Set (a ? ?) where > > > > > field > > > > > isMagma : IsMagma ? > > > > > assoc : Associative ? > > > > > > > > > > open IsMagma isMagma public > > > > > --------------------------------------------------------- > > > > > > > > > > And all this implements the meaning of a small sentence: > > > > > ``Semigroup is Magma in which multiplication _?_ is > > > > > associative''. > > > > > > > > > > Why not put ``record IsSemigroup'' before ``record > Semigroup'' > > > > > in the > > > > > same file Algebra.agda ? > > > > > > > > > > Similarly other `Is' GAS decls can join. So that > Algebra.agda > > > > > and > > > > > Algebra/Structures.agda will merge into Algebra.agda in > > > > > which each > > > > > GAS will be defined in one place. > > > > > For example, to see what is a group will need to look into > one > > > > > file, not > > > > > in two files. > > > > > ? > > > > > > > > > > > > > > > 3. Why Magma declares the fields Carrier and _?_ by new? > > > > > > > > > > Similarly, why other GAS re-declare many fields? > > > > > > > > > > In theory, we have > > > > > ``Magma is a setoid with an operation _?_ congruent with > > > > > respect to the > > > > > equality _?_''. > > > > > > > > > > So, Magma inherits Setoid. And it is natural for its > > > > > representation in > > > > > Agda to have setoid somewhere inside it. So, it opens > this > > > > > setoid and > > > > > uses its fields in further definitions. For example, like > > > > > this: > > > > > > > > > > -- Version II > > > > > --------------------------------------------------------- > > > > > > > > > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > > > > > (Setoid.Carrier S)) : > > > > > > Set > > > > > (? ? ?=) > > > > > where > > > > > open Setoid S using (_?_; Carrier) > > > > > field > > > > > ?cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > > > > > > > > > record Magma ? ?= : Set (suc (? ? ?=)) > > > > > where > > > > > field setoid : Setoid ? ?= > > > > > > > > > > open Setoid setoid public > > > > > infixl 7 _?_ > > > > > > > > > > field _?_ : Op? Carrier > > > > > isMagma : IsMagma setoid _?_ > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > And let us call Version I the approach of Standard > library > > > > > lib-0.17. > > > > > > > > > > Both versions use an `Is' structure, but II does not > > > > > re-declare fields. > > > > > Is not II more natural? > > > > > > > > > > > > > > > Another question may be: > > > > > ``why splitting each GAS into proper structure and `Is' > > > > > structure?''. > > > > > > > > > > My guess is that this approach allows us to express two > GAS-s > > > > > that are > > > > > over the same inherited GAS. For example, a programmer can > > > > > express a > > > > > product of two Magmae over the same Setoid: > > > > > > ------------------------------------------------------------ > > > > > module _ {? ?=} (S : Setoid ? ?=) > > > > > where > > > > > open Setoid S using (Carrier; _?_) > > > > > SS = ?-setoid S S > > > > > open Setoid SS using () renaming (Carrier to CC; _?_ to > > > > > _=p_) > > > > > > > > > > magmaProduct' : > > > > > (_*?_ _*?_ : Op? Carrier) ? IsMagma _?_ _*?_ ? > > > > > IsMagma _?_ _*?_ ? Magma ? > ?= > > > > > magmaProduct' _*?_ _*?_ insM? isM? = > > > > > multiplcation > > > > > on CC; > > > > > prove ...; return the Magma record > > > > > > > > > > > > ------------------------------------------------------------ > > > > > > > > > > (is there any other purpose to introduce `Is' > -structures?). > > > > > > > > > > This is equally easy to set both in Version I and Version > II. > > > > > > > > > > But note that both approaches still deviate, a bit, from > the > > > > > theory. > > > > > Because in theory, it is > > > > > \ (mg1 : Magma_ _) (mg2 : Magma _ _) (HaveCommonSetoid mg1 > > > > > mg2) ? > > > > > product-magma, > > > > > while magmaProduct' takes certain parts of the two magmae. > > > > > > > > > > So, there remain somewhat three and a half questions. > > > > > > > > > > Thank you in advance for your possible explanation. > > > > > > > > > > ------ > > > > > Sergei > > > > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > Agda mailing list > > > > > Agda at lists.chalmers.se > > > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > > > > _______________________________________________ > > > > Agda mailing list > > > > Agda at lists.chalmers.se > > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > > > > > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Sat Mar 16 19:52:37 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 16 Mar 2019 21:52:37 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> Message-ID: <1552762357.2360.43.camel@one.mechvel.pereslavl.ru> On Sat, 2019-03-16 at 18:16 +0800, Matthew Daggitt wrote: >[..] > If this is the only reason, then it occurs that `Is' structure > is needed only in few cases. > > > I think your examples miss the point. For example take any binary > operator. That binary operator may form many different > Semigroups/Monoids/Groups etc. depending on what the underlying > equality is. The `Is` structures allow you to expose which equality > you're using at a particular point, whereas your suggestion would hide > it. A Semigroup can be only on some (magma : Magma _ _). This `magma' already has an instance of _?_ and of _?_. What freedom has one to define (H : Semigroup _ _) on this particular (magma : Magma _ _) ? The only freedom is to choose a proof for Associative _?_ _?_, because _?_ and _?_ are already fixed, they are brought in by "open Setoid setoid ...". So the matter here is only in the proof relevance. For defining Magma on the given (S : Setoid), there is more freedom. _?_ is fixed, but _?_ may be implemented in different ways. > The `Is` structures allow you to expose which equality you're using at > a particular point, whereas your suggestion would hide it. No, in the experimental tower (let us call it so) the equality and all operations are exposed by the `open' declaration: -- experimental ------------------------------------------------------- record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier S)) : Set (? ? ?=) where open Setoid S using (_?_; Carrier) field ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ record Magma ? ?= : Set (suc (? ? ?=)) where field setoid : Setoid ? ?= open Setoid setoid public infixl 7 _?_ field _?_ : Op? Carrier isMagma : IsMagma setoid _?_ record Semigroup ? ?= : Set (suc (? ? ?=)) -- non-standard where field magma : Magma ? ?= open Magma magma using (_?_; _?_) module FP? = FuncProp _?_ field ?-assoc : FP?.Associative _?_ -------------------------------------------------------------------------- Here IsMagma (isMagma) is preserved as in standard, because this enables us to define different Magmae on the same (S : Setoid). But IsSemigroup (isSemigroup) is skipped, because it is not possible to define different semigroups on the given (magma : Magma) -- if only we ignore difference in proofs for FP?.Associative _?_. Now I think that IsSemigroup is all right. But repeated fields of Carrier, _?_, and such, look strange to me. Regards, ------ Sergei From xqi01 at cs.tufts.edu Sat Mar 16 20:21:37 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Sat, 16 Mar 2019 15:21:37 -0400 Subject: [Agda] inspect idiom with more than one argument Message-ID: <27c8292e29b27ed83098c9927e29e940527e5034.camel@cs.tufts.edu> Hello all, I have used the inspect idiom from time to time, but it seems that I can't really "inspect" a function call with more than 1 argument. Say I want to do this: f x y with g x y | inspect g x y However, this won't work, unfortunately. Are there any ways to work around this? e.g. uncurrying the function? Thanks, Ray -- Xuanrui (Ray) Qi xqi01 at cs.tufts.edu me at xuanruiqi.com https://www.xuanruiqi.com From fdhzs2010 at hotmail.com Sat Mar 16 20:25:48 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sat, 16 Mar 2019 19:25:48 +0000 Subject: [Agda] inspect idiom with more than one argument In-Reply-To: <27c8292e29b27ed83098c9927e29e940527e5034.camel@cs.tufts.edu> References: <27c8292e29b27ed83098c9927e29e940527e5034.camel@cs.tufts.edu> Message-ID: try `inspect (g x) y` Sincerely Yours, Jason Hu ________________________________ From: Agda on behalf of Xuanrui Qi Sent: March 16, 2019 3:21 PM To: agda list Subject: [Agda] inspect idiom with more than one argument Hello all, I have used the inspect idiom from time to time, but it seems that I can't really "inspect" a function call with more than 1 argument. Say I want to do this: f x y with g x y | inspect g x y However, this won't work, unfortunately. Are there any ways to work around this? e.g. uncurrying the function? Thanks, Ray -- Xuanrui (Ray) Qi xqi01 at cs.tufts.edu me at xuanruiqi.com https://www.xuanruiqi.com _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From xqi01 at cs.tufts.edu Sat Mar 16 21:27:04 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Sat, 16 Mar 2019 16:27:04 -0400 Subject: [Agda] inspect idiom with more than one argument In-Reply-To: References: <27c8292e29b27ed83098c9927e29e940527e5034.camel@cs.tufts.edu> Message-ID: Oops. Of course this works. Thanks a lot, Ray On Sat, 2019-03-16 at 19:25 +0000, Jason -Zhong Sheng- Hu wrote: > try `inspect (g x) y` > > Sincerely Yours, > > Jason Hu > From: Agda on behalf of Xuanrui Qi < > xqi01 at cs.tufts.edu> > Sent: March 16, 2019 3:21 PM > To: agda list > Subject: [Agda] inspect idiom with more than one argument > > Hello all, > > I have used the inspect idiom from time to time, but it seems that I > can't really "inspect" a function call with more than 1 argument. Say > I > want to do this: > > f x y with g x y | inspect g x y > > However, this won't work, unfortunately. Are there any ways to work > around this? e.g. uncurrying the function? > > Thanks, > Ray > From fdhzs2010 at hotmail.com Sun Mar 17 05:14:50 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sun, 17 Mar 2019 04:14:50 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: References: <1552673369.2380.9.camel@one.mechvel.pereslavl.ru>, Message-ID: A minor question: why the version of 2.6.0 RC remains 2.5.4.2 instead of naming it closer to what it is? Sincerely Yours, Jason Hu ________________________________ From: Agda on behalf of Andres Sicard Ramirez Sent: March 15, 2019 3:06 PM To: Sergei Meshveliani Cc: Agda users Subject: Re: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 On Fri, 15 Mar 2019 at 13:09, Sergei Meshveliani wrote: > > I try it on ghc-8.6.3, Ubuntu Linux 18.04. > > After installing Agda 2.5.4.2.20190310 and > master lib of March 15, 2019, Please note you need the *experimental* branch of the standard library with Agda 2.5.4.2.20190310. Best, -- Andr?s _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Sun Mar 17 13:24:19 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sun, 17 Mar 2019 15:24:19 +0300 Subject: [Agda] new InequalityReasoning Message-ID: <1552825459.2408.22.camel@one.mechvel.pereslavl.ru> Dear standard library supporters, I am trying to use inequality reasoning provided in lib-0.18, and have certain difficulties. Currently I use a non-standard InequalityReasoning by Ulf Norell (see LtReasoning.agda attached). Now I need to replace it with the standard inequality reasoning of lib-0.18-candidate. I attach a file with small examples test1 ... test6 that work under InequalityReasoning by Ulf Norell. They have been tested under Agda-2.6.0-candidate, ghc-8.6.3. They show proofs for various combinations of the relations _?_, _?_; _?_, _<_. Can you, please, demonstrate the corresponding code with using the inequality reasoning of lib-0.18 ? Somehow extract (poset : Poset) open Relation.Binary.Reasoning.PartialOrder poset using ... ... Which modules to open, how to rename things, in order to have a module with similar proofs for test1 ... test6 ? Such an explanation can be, say, a part of the manual for the library. Here I copy an essential part of the code: ---------------------------------------------------------------------- ... import Relation.Binary.EqReasoning as EqR -- standard open import LtReasoning using (module InequalityReasoning) -- nonstandard -- the two "reasonings" imported ... module _ {c ?? ??} (dto : DecTotalOrder c ?? ??) (open DecTotalOrder dto using () renaming (Carrier to C)) (_<_ : Rel C ??) where open DecTotalOrder dto using (_?_; _?_; module Eq) open Eq using (decSetoid) open DecSetoid decSetoid using (setoid) postulate ?-reflexive : {x y : C} ? x ? y ? x ? y ?-reflexive? : {x y : C} ? x ? y ? x ? y ?-trans : Transitive _?_ <-trans : Transitive _<_ <-?-trans : {x y z : C} ? x < y ? y ? z ? x < z ?-<-trans : {x y z : C} ? x ? y ? y < z ? x < z open InequalityReasoning {A = C} _<_ _?_ (\{x y} ? ?-reflexive {x} {y}) (\{x y z} ? <-trans {x} {y} {z}) (\{x y z} ? ?-trans {x} {y} {z}) (\{x y z} ? <-?-trans {x} {y} {z}) (\{x y z} ? ?-<-trans {x} {y} {z}) renaming (begin_ to begin-ineq_; _? to _end-ineq) -- it imports _<[_]_; _?[_]_; _?[_]_ ... test5 : ? {x y z u} ? x < y ? y ? z ? z ? u ? x < u test5 {x} {y} {z} {u} x References: <1552673369.2380.9.camel@one.mechvel.pereslavl.ru> Message-ID: On Sat, 16 Mar 2019 at 23:14, Jason -Zhong Sheng- Hu wrote: > > A minor question: why the version of 2.6.0 RC remains 2.5.4.2 instead of naming it closer to what it is? > Because RC version = current released version + date -- Andr?s From andersmortberg at gmail.com Mon Mar 18 20:20:36 2019 From: andersmortberg at gmail.com (Anders Mortberg) Date: Mon, 18 Mar 2019 15:20:36 -0400 Subject: [Agda] PhD position in Computational Mathematics at Stockholm University Message-ID: The Department of Mathematics at Stockholm University invites applications for a PhD position in Computational Mathematics. A prospective student will have the opportunity to engage in exciting research related to programming logic, type theory, constructive mathematics and category theoretic foundations. The student will be part of the newly founded Computational Mathematics division. It will also be possible to collaborate with other groups in the department, such as the Mathematical Logic group (with experts on constructive mathematics and type theory like Per Martin-L?f, Erik Palmgren and Peter LeFanu Lumsdaine) and the Algebra, Geometry, Topology, and Combinatorics group. For further information and instructions on how to apply see https://www.su.se/english/about/working-at-su/phd?rmpage=job&rmjob=8652&rmlang=UK The deadline for application is April 23, 2019. If you are interested in applying and have any questions feel free to contact me. -- Anders M?rtberg From chrodos at gmail.com Tue Mar 19 08:49:53 2019 From: chrodos at gmail.com (Christos Rodosthenous) Date: Tue, 19 Mar 2019 09:49:53 +0200 Subject: [Agda] 2nd CFP: 3rd International Workshop on User-Oriented Logic Paradigms In-Reply-To: References: <65d00745-9bbd-4866-90f3-ba01f59886df@googlegroups.com> Message-ID: *** IULP 2019 *** 3rd International Workshop on User-Oriented Logic Paradigms June 3 or 4, 2019 https://iulp2019.uni-leipzig.de Collocated with the 15th International Conference on Logic Programming and Nonmonotonic Reasoning (LPNMR 2019) Philadelphia, USA June 4 - 6, 2019 -------------------------------------------- Since the emergence of logic reasoning paradigms, such as logic programming, argumentation, and other non-monotonic reasoning formalisms, a lot of theoretical work has been done, for example with respect to different semantics and their properties. More recently, implementations and IDEs emerged which have been used for various problem-solving applications. However, user-friendliness is still an issue for both experts and non-experts working with logic paradigms; for example experts benefit from features like debugging and heuristic tuning, non-experts from educational material, explanations, and intuitive visualisations - all of which are ongoing topics of research. The 3rd International Workshop of User-Oriented Logic Paradigms (IULP) focuses on discussing different aspects involved in making logic paradigms more user-friendly/oriented, where the "user" could be either an expert of the paradigm, or a non-expert who simply uses tools developed for the paradigm in some application. IULP aims to bring together researchers working on different logic paradigms, such as answer set programming, constraint logic programming, probabilistic logic programming, abductive logic programming, inductive logic programming, argumentation, principles of teaching etc., as user- friendliness is an important topic in all of these areas. IULP aims to provide an international forum for researchers in the AI, KR, and applied sciences community to discuss and present advances in theories, formalisms, and applications to deliver the mature and well-defined methods of logic paradigms to a wider audience. We solicit the submission of papers broadly centred on issues and research related to user-friendliness in logic paradigms and related fields. We welcome papers of either theoretical or practical nature, including work in progress. IMPORTANT DATES -------------------------------------------- * Submission deadline: Sun, March 31st 2019 * Notification to authors: Mon, April 29th 2019 * Camera-ready version due: Mon, May 20th 2019 * Workshop date: June 3 or 4, 2019 TOPICS -------------------------------------------- Topics of interest include (but are not limited to): * IDEs * debugging * explanations * visualisation * best practice * modularity * usage of natural language * heuristic tuning * LP education * language extensions * transparency * algorithmic bias * credibility * accountable systems SUBMISSIONS -------------------------------------------- Papers must be formatted in Springer LNCS style (http://www.springer.com/lncs) and should not exceed 13 pages (excluding references and appendices). All submissions have to be written in English and submitted electronically as a PDF through easychair (https://easychair.org/conferences/?conf=iulp2019). A short system demonstration version which should not exceed 6 pages (excluding references and appendices) can be submitted electronically too. We encourage the submission of original research on all topics as well as relevant results that have been submitted or accepted elsewhere provided that the initial publication is mentioned in a footnote on the first page. Note that authorship is not anonymous and that at least one author of each accepted paper is required to attend the workshop to present the contribution. PROCEEDINGS -------------------------------------------- There are no formal proceedings for IULP. The accepted papers will be published as a technical report and will be made available in the Computing Research Repository (CoRR). The copyright of the papers lies with the authors and, as far as IULP is concerned, authors are free to submit their work to other conferences and workshops. COMMITTEE -------------------------------------------- Chairs: * Stefan Ellmauthaler (Leipzig University) * Christos Rodosthenous (Open University of Cyprus) Program Committee * Bart Bogaerts (Vrije Universiteit Brussel) * Gerhard Brewka (Leipzig University) * Marina De Vos (University of Bath) * Marc Denecker (Katholieke Universiteit Leuven) * Martin Gebser (Potsdam University) * Antonis C. Kakas (University of Cyprus) * Antonio Lieto (University of Turin) * Loizos Michael (Open University of Cyprus) * Yisong Wang (Guizhou University) * Stefan Woltran (Vienna University of Technology) CONTACT -------------------------------------------- iulp2019 [at] informatik [dot] uni-leipzig [dot] de HOMEPAGE -------------------------------------------- https://iulp2019.uni-leipzig.de From mechvel at botik.ru Tue Mar 19 11:26:25 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Tue, 19 Mar 2019 13:26:25 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: References: Message-ID: <1552991185.12316.4.camel@scico.botik.ru> I have tested it on ghc-8.6.3, MAlonzo, Ubuntu Linux 18.04, on certain application libraries called Binary, Fraction, Polynomial. It looks all right. ------ Sergei On Fri, 2019-03-15 at 12:41 +0000, Andres Sicard Ramirez wrote: > Dear all, > > The Agda Team is very pleased to announce the first release candidate > of Agda 2.6.0. > > Installation > ======= > > This RC can be installed using the following instructions: > > $ cabal install > https://hackage.haskell.org/package/Agda-2.5.4.2.20190310/candidate/Agda-2.5.4.2.20190310.tar.gz > > or > > $ cabal get https://hackage.haskell.org/package/Agda-2.5.4.2.20190310/candidate/Agda-2.5.4.2.20190310.tar.gz > $ cd Agda-2.5.4.2.20190310 > $ cabal install > > GHC supported versions > =============== > > This RC has been tested with GHC 8.6.4, 8.4.4, 8.2.2, 8.0.2 and 7.10.3 > on Linux, macOS and Windows. > > Standard library > ========== > > For the time being, you can use the *experimental* branch of the > standard library which is compatible with > this RC. This branch is available at > > https://github.com/agda/agda-stdlib/ > > What is new, fixed issues and incompatibilities > ================================ > > * http://hackage.haskell.org/package/Agda-2.5.4.2.20190310/candidate/changelog > > * New option `--cubical` to enable support for path equality and > related features from Cubical Type Theory > (https://arxiv.org/abs/1611.02108), including univalence and higher > inductive types. See `Cubical` in the documentation for more info. > > Enjoy the RC and please test as much as possible. > From 33dbqnxpy7if at gmail.com Tue Mar 19 16:56:26 2019 From: 33dbqnxpy7if at gmail.com (Serge Leblanc) Date: Tue, 19 Mar 2019 16:56:26 +0100 Subject: [Agda] Why unification fail? In-Reply-To: <023a2756-c22f-148b-101f-de09b3db17c8@ens-lyon.org> References: <023a2756-c22f-148b-101f-de09b3db17c8@ens-lyon.org> Message-ID: <9e617996-e1d4-b35e-799e-2ed4766a269a@gmail.com> Hi every, in the following example, how do informe Agda that 'i ? o ? suc (k + i)' it's true and compatible? Saluton ?iun,en la sekva ekzemplo, kiel informi al Agda ke 'i ? o ? suc (k + i)' veras kaj kongruas? Sinceran dankon, -- Serge Leblanc ------------------------------------------------------------------------ gpg --search-keys 0x67B17A3F Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- module Chomp2 where open import Data.Nat --as ? open import Data.Nat.Properties open import Function using (id ; _?_) open import Relation.Binary.PropositionalEquality as PropEq using (_?_ ; refl ; cong ; sym ; inspect ; [_] ) -- ; _?_ ; refl ; sym ; trans ; cong ; cong? ; cong-app) open PropEq.?-Reasoning infixr 15 _?_ data ? : ? ? Set where [_] : (o : ?) ? ? o _?_ : ? {n} ? (x : ?) ? (xs : ? n) ? ? (x + n) ? : ? {n} ? ? n ? ? ? [ o ] = o ? (h ? t) = h + ? t --infix 25 _?_ -- U+2ABE ? +-distrib?-?? : (m k : ?) ? (m + k) ? m ? k + m +-distrib?-?? m k = begin (m + k) ? m ?? cong (? s ? s ? m) (+-comm m k) ? (k + m) ? m ?? sym (+-distrib?-? m k 0) ? k ? 0 + m ?? cong (_+ m) (?-identity? k) ? k + m ? +-distrib?-?? : (m k : ?) ? (m + k) ? m ? m + k +-distrib?-?? m k = begin (m + k) ? m ?? +-distrib?-?? m k ? k + m ?? +-comm k m ? m + k ? +-distrib?-?? : (m k : ?) ? m ? (m + k) ? k + m +-distrib?-?? m k = begin m ? (m + k) ?? cong (? s ? m ? s) (+-comm m k) ? m ? (k + m) ?? sym (+-distrib?-? m 0 k) ? k + m ? +-distrib?-?? : (m k : ?) ? m ? (m + k) ? m + k +-distrib?-?? m k = begin m ? (m + k) ?? +-distrib?-?? m k ? k + m ?? +-comm k m ? m + k ? +-distrib?-?? : (m k : ?) ? m ? suc (m + k) ? suc (k + m) +-distrib?-?? m k = begin m ? suc (m + k) ?? sym (cong (? s ? m ? s) (+-suc m k)) ? m ? (m + suc k) ?? +-distrib?-?? m (suc k) ? suc (k + m) ? ?-cancel?-? : ? {i o? o?} ? i ? (i + o?) ? i ? (i + o?) ? o? ? o? ?-cancel?-? {i} {o?} {o?} eq rewrite +-distrib?-?? i o? | +-distrib?-?? i o? = +-cancel?-? i eq {- ??? : (i o k : ?) ? compare i (suc (i + k)) ? less i k ? i ? o ? suc (k + i) ??? i o k lt = {! !} -} l? = 3 ? 2 ? [ 4 ] l? = 3 ? 3 ? 5 ? [ 3 ] ? : ? {n} ? (x : ?) ? ? n ? ? (x ? n) ? i l with ? l | compare i (? l) | inspect (compare i) (? l) ? i [ o ] | ?l | less m k | [ eq ] {-rewrite ??? i o k eq-} = {! suc k ? [ m ] !} ? i (h ? t) | ?l | less m k | [ eq ] = {! (suc (m + k) ? (? (? i t))) ? ? i t !} ... | ?l | equal m | [ eq ] {-rewrite ?-idem i-} = {! l !} ... | ?l | greater m k | [ eq ] = {! suc k ? l !} ? : ? {n? n?} ? ? n? ? ? n? ? ? (n? ? n?) ? [ o ] l = {! ? o l !} ? l?@(_ ? t) l? = {! ? (? l?) (? t l?) !} {- ? : ? {n? n?} ? ? n? ? ? n? ? ? (n? ? n?) ? l?@([ o? ]) l?@([ o? ]) with compare o? o? ... | less m k rewrite +-distrib?-?? m k = suc k ? [ m ] ... | equal m rewrite ?-idem m = [ m ] ... | greater m k rewrite +-distrib?-?? m k = suc k ? [ m ] ? {q?} {q?} l?@([ o? ]) l?@(h? ? t?) with q? | compare q? q? ... | ?l | less m k rewrite +-distrib?-?? m k = {! (?l ? (? (? l? t?))) ? ? l? t? !} ... | ?l | equal m rewrite ?-idem m = {! l? !} ... | ?l | greater m k rewrite +-distrib?-?? m k = {! suc k ? l? !} ? {q?} {q?} l?@(h? ? t?) l?@([ o? ]) with q? | compare q? q? ... | ?l | less m k rewrite +-distrib?-?? m k = {! suc k ? l? !} ... | ?l | equal m rewrite ?-idem m = {! l? !} ... | ?l | greater m k rewrite +-distrib?-?? m k = {! (?l ? (? (? t? l?))) ? ? t? l? !} ? {q?} {q?} l?@(h? ? t?) l?@(h? ? t?) with q? | q? | compare q? q? ... | ?l? | ?l? | less m k rewrite +-distrib?-?? m k = {! (?l? ? ? (? l? t?)) ? ? l? t? !} ... | ?l? | ?l? | equal m rewrite ?-idem m = {! (m ? ? (? t? t?)) ? ? t? t? !} ... | ?l? | ?l? | greater m k rewrite +-distrib?-?? m k = {! (?l? ? ? (? t? l?)) ? ? t? l? !} -} -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 228 bytes Desc: OpenPGP digital signature URL: From fdhzs2010 at hotmail.com Tue Mar 19 17:27:27 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Tue, 19 Mar 2019 16:27:27 +0000 Subject: [Agda] What do "constraints" mean? Message-ID: Hi, I find that there are two gestures I rarely used: C-c C-= Show constraints C-c C-s Solve constraints What are constraints? In what situations you will use these two gestures? Sincerely Yours, Jason Hu -------------- next part -------------- An HTML attachment was scrubbed... URL: From henning at basold.eu Tue Mar 19 18:33:07 2019 From: henning at basold.eu (Henning Basold) Date: Tue, 19 Mar 2019 18:33:07 +0100 Subject: [Agda] CALCO 2019: Second Call for Papers Message-ID: <9ba49485-1d36-ed09-a597-227d5b0193f8@basold.eu> ========================================================= CALL FOR PAPERS: CALCO 2019 8th International Conference on Algebra and Coalgebra in Computer Science June 3-6, 2019 University College London, UK Co-located with MFPS XXXV https://www.coalg.org/calco-mfps-2019/ ========================================================== Abstract submission: April 3, 2019 Paper submission: April 8, 2019 Author notification: May 13, 2019 Final version due: May 27, 2019 ========================================================== SCOPE --------- CALCO aims to bring together researchers and practitioners with interests in foundational aspects, and both traditional and emerging uses of algebra and coalgebra in computer science. It is a high-level, bi-annual conference formed by joining the forces and reputations of CMCS (the International Workshop on Coalgebraic Methods in Computer Science), and WADT (the Workshop on Algebraic Development Techniques). Previous CALCO editions took place in Swansea (Wales, 2005), Bergen (Norway, 2007), Udine (Italy, 2009), Winchester (UK, 2011), Warsaw (Poland, 2013), Nijmegen (the Netherlands, 2015), and Ljubljana (Slovenia,2017). The eighth edition will be held in London, UK, colocated with MFPS XXXV. INVITED SPEAKERS -- SPECIAL SESSION ----------------------------------------- CALCO will have four invited speakers, and a joint special session with MFPS. We are pleased to announce the following invited speakers: * Stefan Milius, University of Erlangen-Nuremberg, Germany * Damien Pous, CNRS, ENS Lyon, France (with MFPS) * Grigore Rosu, University of Illinois at Urbana-Champaign, US * Mehrnoosh Sadrzadeh, Queen Mary University of London, UK (with MFPS) Damien Pous will organise the joint CALCO and MFPS special session on Coinduction for Verification and Certification. SUBMISSIONS -------------- CALCO invites three categories of submissions: * Full technical papers that report - results of theoretical work on the mathematics of algebras and coalgebras, - the way these results can support methods and techniques for software development, as well as - experience with the transfer of the resulting technologies into industrial practice. * Early ideas abstracts that lead to presentation of work in progress and original research proposals. PhD students and young researchers are particularly encouraged to contribute. * Tool papers that report on the development and use of tools for algebraic and coalgebraic methods in computer science. TOPICS OF INTEREST -------------------- Typical, but not exclusive topics of interest are: * Abstract models and logics - Automata and languages - Categorical semantics - Graph transformation - Modal logics - Proof systems - Relational systems - Term rewriting * Algebraic and coalgebraic semantics - Abstract data types - Inductive and coinductive methods - Re-engineering techniques (program transformation) - Semantics of conceptual modelling methods and techniques - Semantics of programming languages * Corecursion in programming languages - Corecursion in logic/constraint/functional/answer set programming - Corecursive type inference - Coinductive methods for proving program properties - Implementing corecursion - Applications * Role of algebraic and coalgebraic methods in software and systems engineering - Development processes with algebraic and coalgebraic methods - Method integration - Usage guidelines * Specialised models and calculi - Hybrid, probabilistic, and timed systems - Models and calculi of concurrent, distributed, mobile, cyber-physical, and context-aware computing - Systems theory and computational models (chemical,biological,etc.) * String diagrams and network theory - Combinatorial approaches - Theory of PROPs and operads - Rewriting problems and higher-dimensional approaches - Automated reasoning with string diagrams - Applications of string diagrams - Connections with control theory, engineering, and concurrency * System specification and verification - Algebraic and coalgebraic specification - Formal testing and quality assurance - Generative programming and model-driven development - Integration of formal specification techniques - Model-driven development - Process algebra - Specification languages, methods, and environments - Validation and verification * Tools supporting algebraic and coalgebraic methods for - Advances in automated verification - Model checking - Theorem proving - Testing * Quantum computing with algebra and coalgebra - Categorical semantics for quantum computing - Quantum calculi and programming languages - Foundational structures for quantum computing - Applications of quantum algebra SUBMISSION GUIDELINES ------------------------ All submissions will be handled via EasyChair. ### Full technical papers ### Prospective authors are invited to submit full technical papers in English presenting original research. Submitted papers must be unpublished and not submitted for publication elsewhere. Experience papers are welcome, but they must clearly present general lessons learned that would be of interest and benefit to a broad audience of both researchers and practitioners. Proceedings will be published in the Dagstuhl LIPIcs Leibniz International Proceedings in Informatics series. Final papers should be 12-15 pages long (excluding the bibliography and a brief appendix of up to 5 pages from this page limit) in the format specified by LIPIcs http://www.dagstuhl.de/en/publications/lipics/instructions-for-authors/ (Note that there is a new version of the style: lipics-v2019). It is recommended that submissions adhere to that format and length. Submissions that are clearly too long may be rejected immediately. Proofs omitted due to space limitations may be included in a clearly marked appendix. Both an abstract and the full paper must be submitted by their respective submission deadlines. At least one of the authors must attend the conference to present the paper. A special issue of the open access journal Logical Methods in Computer Science (http://www.lmcs-online.org), containing extended versions of selected papers, is also being planned. ### Early ideas abstracts ### Submissions should not exceed 2 pages in the format specified by LIPIcs http://www.dagstuhl.de/en/publications/lipics/instructions-for-authors/ (Note that there is a new version of the style: lipics-v2019). The volume of selected abstracts will be made available on arXiv and on the CALCO pages. Authors will retain copyright, and are also encouraged to disseminate the results by subsequent publication elsewhere. At least one of the authors must attend the conference to present the work. ### Tool papers ### Submissions should not exceed 5 pages in the format specified by LIPIcs http://www.dagstuhl.de/en/publications/lipics/instructions-for-authors/ (Note that there is a new version of the style: lipics-v2019). The accepted tool papers will be included in the final proceedings of the conference. The tools should be made available on the web at the time of submission for download and evaluation. Each submission will be evaluated by at least three reviewers, and one or more of the reviewers will be asked to download and use the tool. At least one of the authors of each tool paper must attend the conference to demonstrate the tool. BEST PAPER AND BEST PRESENTATION AWARDS -------------------------------------------- This edition of CALCO will feature two awards: a Best Paper Award whose recipients will be selected by the PC before the conference and a Best Presentation Award, elected by the participants. IMPORTANT DATES ------------------- Abstract submission: April 3, 2019 Paper submission: April 8, 2019 Author notification: May 13, 2019 Final version due: May 27, 2019 PROGRAMME COMMITTEE ----------------------- * Filippo Bonchi (University of Pisa, Italy) * Corina Cirstea (University of Southampton, UK) * Bob Coecke (University of Oxford, UK) * Jos? Luiz Fiadeiro (Royal Holloway University of London, UK) * Daniel Gaina (Kyushu University, Japan) * Sergey Goncharov (University of Erlangen-Nuremberg, Germany) * Ichiro Hasuo (National Institute of Informatics, Japan) * Chris Heunen (University of Edinburgh, UK) * Helle Hvid Hansen (Delft University of Technology, The Netherlands) * Magne Haveraaen (University of Bergen, Norway) * Bart Jacobs (Radboud University Nijmegen, The Netherlands) * Bartek Klin (University of Warsaw, Poland) * Alexander Knapp (University of Augsburg, Germany) * Ekaterina Komendantskaya (Heriot-Watt University, UK) * Barbara K?nig (University of Duisburg-Essen, Germany) * Clemens Kupke (University of Strathclyde, UK) * Alexander Kurz (Chapman University, US) * Narciso Mart?-Oliet (Complutense University Madrid, Spain) * Larry Moss (Indiana University, US) * Till Mossakowski (University of Magdeburg, Germany) * Peter ?lveczky (University of Oslo, Norway) * Dirk Pattinson (Australian National University, Australia) * Daniela Petrisan (University Paris Diderot, France) * Carlos Gustavo Lopez Pombo (Universidad de Buenos Aires, Argentina) * Damien Pous (CNRS, ENS Lyon, France) * Markus Roggenbach (PC co-chair, Swansea University, UK) * Juriaan Rot (Radboud University Nijmegen, The Netherlands) * Pierre-Yves Schobbens (University of Namur, Belgium) * Lutz Schr?der (University of Erlangen-Nuremberg, Germany) * Ana Sokolova (PC co-chair, University of Salzburg, Austria) * Ionut Tutu (Romanian Academy, Romania) * Fabio Zanasi (University College London, UK) LOCAL ORGANISERS ------------------------ * Philippa Gardner (Imperial College London, UK) * Emanuele D?Osualdo (Imperial College London, UK) * Alexandra Silva (University College London, UK) * Fabio Zanasi (University College London, UK) PUBLICITY CHAIR ------------------ * Henning Basold (CNRS, ENS Lyon, France) From mechvel at botik.ru Tue Mar 19 19:46:12 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Tue, 19 Mar 2019 21:46:12 +0300 Subject: [Agda] new InequalityReasoning In-Reply-To: <1552825459.2408.22.camel@one.mechvel.pereslavl.ru> References: <1552825459.2408.22.camel@one.mechvel.pereslavl.ru> Message-ID: <1553021172.2344.20.camel@one.mechvel.pereslavl.ru> On Sun, 2019-03-17 at 15:24 +0300, Sergei Meshveliani wrote: > Dear standard library supporters, > > I am trying to use inequality reasoning provided in lib-0.18, > and have certain difficulties. > > Currently I use a non-standard InequalityReasoning by Ulf Norell > (see LtReasoning.agda attached). > > Now I need to replace it with the standard inequality reasoning of > lib-0.18-candidate. > > I attach a file with small examples test1 ... test6 > > that work under InequalityReasoning by Ulf Norell. > They have been tested under > Agda-2.6.0-candidate, ghc-8.6.3. > > They show proofs for various combinations of the relations > _?_, _?_; _?_, _<_. > > Can you, please, demonstrate the corresponding code with using the > inequality reasoning of lib-0.18 ? > I discover now the responsible module in standard library 0.18-candidate: Relation.Binary.Reasoning.Base.Triple. Now, all examples work -- except test3 below. test3 looks like a specialization of test2, and it is strange that it is not type-checked. Can people, please, tell what is the matter here? how to fix? It is possible to use PE.?-Reasoning, with renaming constructors. But may be, its is possible some wiser usage of relation.Binary.Reasoning.Base.Triple -- ? Thanks, ------ Sergei ----------------------------------------------------------------------- open import Relation.Binary using (Rel; Transitive; _Respects?_; DecTotalOrder) open import Relation.Binary.PropositionalEquality as PE using (_?_) import Relation.Binary.Reasoning.Base.Triple as IneqReasoning module _ {c ?? ??} (dto : DecTotalOrder c ?? ??) (open DecTotalOrder dto using (_?_; _?_; isPreorder) renaming (Carrier to C)) (_<_ : Rel C ??) (<-resp-? : _<_ Respects? _?_) where postulate <-trans : Transitive _<_ References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> <1552762357.2360.43.camel@one.mechvel.pereslavl.ru> Message-ID: Say you have a module and you want to parameterise it by a semigroup that *must* use propositional equality. How would you do that using your hierarchy? On Sun, Mar 17, 2019 at 2:52 AM Sergei Meshveliani wrote: > On Sat, 2019-03-16 at 18:16 +0800, Matthew Daggitt wrote: > >[..] > > > If this is the only reason, then it occurs that `Is' structure > > is needed only in few cases. > > > > > > I think your examples miss the point. For example take any binary > > operator. That binary operator may form many different > > Semigroups/Monoids/Groups etc. depending on what the underlying > > equality is. The `Is` structures allow you to expose which equality > > you're using at a particular point, whereas your suggestion would hide > > it. > > > A Semigroup can be only on some (magma : Magma _ _). This `magma' > already has an instance of _?_ and of _?_. > What freedom has one to define (H : Semigroup _ _) on this particular > (magma : Magma _ _) ? > The only freedom is to choose a proof for Associative _?_ _?_, > because _?_ and _?_ are already fixed, they are brought in by > "open Setoid setoid ...". > So the matter here is only in the proof relevance. > > For defining Magma on the given (S : Setoid), there is more freedom. > _?_ is fixed, but _?_ may be implemented in different ways. > > > > The `Is` structures allow you to expose which equality you're using at > > a particular point, whereas your suggestion would hide it. > > No, in the experimental tower (let us call it so) the equality and all > operations are exposed by the `open' declaration: > > -- experimental ------------------------------------------------------- > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier S)) : > Set (? ? ?=) > where > open Setoid S using (_?_; Carrier) > field > ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > record Magma ? ?= : Set (suc (? ? ?=)) > where > field setoid : Setoid ? ?= > > open Setoid setoid public > infixl 7 _?_ > > field _?_ : Op? Carrier > isMagma : IsMagma setoid _?_ > > record Semigroup ? ?= : Set (suc (? ? ?=)) -- non-standard > where > field magma : Magma ? ?= > > open Magma magma using (_?_; _?_) > module FP? = FuncProp _?_ > > field ?-assoc : FP?.Associative _?_ > -------------------------------------------------------------------------- > > Here IsMagma (isMagma) is preserved as in standard, because this enables > us to define different Magmae on the same (S : Setoid). > But IsSemigroup (isSemigroup) is skipped, because it is not possible to > define different semigroups on the given (magma : Magma) > -- if only we ignore difference in proofs for FP?.Associative _?_. > > Now I think that IsSemigroup is all right. > But repeated fields of Carrier, _?_, and such, look strange to me. > > Regards, > > ------ > Sergei > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Wed Mar 20 04:52:10 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Wed, 20 Mar 2019 11:52:10 +0800 Subject: [Agda] Fwd: new InequalityReasoning In-Reply-To: References: <1552825459.2408.22.camel@one.mechvel.pereslavl.ru> <1553021172.2344.20.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, First of all you should be using "Relation.Binary.Reasoning.PartialOrder" (where the Poset is from your DecTotalOrder) which provides a nicer interface to the reasoning. Secondly, yes the third example would fail. With the new reasoning you can now do `strict`, `non-strict` and `setoid equality` reasoning. We haven't added propositional equality to it yet. If you think such a feature would be useful, please create an issue on the Github page for the standard library or you could create a pull request adding it yourself. Thanks, Matthew On Wed, Mar 20, 2019 at 2:46 AM Sergei Meshveliani wrote: > On Sun, 2019-03-17 at 15:24 +0300, Sergei Meshveliani wrote: > > Dear standard library supporters, > > > > I am trying to use inequality reasoning provided in lib-0.18, > > and have certain difficulties. > > > > Currently I use a non-standard InequalityReasoning by Ulf Norell > > (see LtReasoning.agda attached). > > > > Now I need to replace it with the standard inequality reasoning of > > lib-0.18-candidate. > > > > I attach a file with small examples test1 ... test6 > > > > that work under InequalityReasoning by Ulf Norell. > > They have been tested under > > Agda-2.6.0-candidate, ghc-8.6.3. > > > > They show proofs for various combinations of the relations > > _?_, _?_; _?_, _<_. > > > > Can you, please, demonstrate the corresponding code with using the > > inequality reasoning of lib-0.18 ? > > > > > I discover now the responsible module in standard library > 0.18-candidate: > Relation.Binary.Reasoning.Base.Triple. > > Now, all examples work -- except test3 below. test3 looks like a > specialization of test2, and it is strange that it is not type-checked. > > Can people, please, tell what is the matter here? how to fix? > It is possible to use PE.?-Reasoning, with renaming constructors. > But may be, its is possible some wiser usage of > relation.Binary.Reasoning.Base.Triple -- ? > > Thanks, > > ------ > Sergei > > > ----------------------------------------------------------------------- > open import Relation.Binary using (Rel; Transitive; _Respects?_; > DecTotalOrder) > open import Relation.Binary.PropositionalEquality as PE using (_?_) > import Relation.Binary.Reasoning.Base.Triple as IneqReasoning > > module _ {c ?? ??} (dto : DecTotalOrder c ?? ??) > (open DecTotalOrder dto using (_?_; _?_; isPreorder) > renaming (Carrier to C)) > (_<_ : Rel C ??) > (<-resp-? : _<_ Respects? _?_) > where > postulate > <-trans : Transitive _<_ > <-?-trans : {x y z : C} ? x < y ? y ? z ? x < z > ?-<-trans : {x y z : C} ? x ? y ? y < z ? x < z > > open IneqReasoning isPreorder <-trans <-resp-? > test1 : {x y z : C} ? x ? y ? y ? z ? x ? z > test1 {x} {y} {z} x?y y?z = > begin-equality x ?? x?y ? > y ?? y?z ? > z > ? > > test2 : {x y z : C} ? x ? y ? y ? z ? x ? z > test2 {x} {y} {z} x?y y?z = > begin-equality x ?? x?y ? > y ?? y?z ? > z > ? > > test3 : {x y z : C} ? x ? y ? y ? z ? x ? z -- fails > test3 {x} {y} {z} x?y y?z = > begin-equality x ?? x?y ? > y ?? y?z ? > z > ? > ------------------------------------------------------------------------ > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From asr at eafit.edu.co Wed Mar 20 11:56:01 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Wed, 20 Mar 2019 10:56:01 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: <1552991185.12316.4.camel@scico.botik.ru> References: <1552991185.12316.4.camel@scico.botik.ru> Message-ID: On Tue, 19 Mar 2019 at 06:04, Sergei Meshveliani wrote: > > I have tested it on ghc-8.6.3, MAlonzo, Ubuntu Linux 18.04, > > on certain application libraries called Binary, Fraction, Polynomial. > It looks all right. > Thank you for testing the release candidate! -- Andr?s From mechvel at botik.ru Wed Mar 20 15:39:53 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 20 Mar 2019 17:39:53 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> <1552762357.2360.43.camel@one.mechvel.pereslavl.ru> Message-ID: <1553092793.2396.17.camel@one.mechvel.pereslavl.ru> On Wed, 2019-03-20 at 11:44 +0800, Matthew Daggitt wrote: > Say you have a module and you want to parameterise it by a semigroup > that must use propositional equality. How would you do that using your > hierarchy? Let me try. The prelude is the definition of Magma and Semigroup by the approach II: a) with isMagma, b) without isSemigroup, c) without repeating fields. Then, module Semigroup? is a submodule in module Magma?. But it can be also declared as a top level module, with joining parameters C, _?_, isMagma?. What is wrong here? -- SM --==================================================================== open import Level using (suc; _?_) open import Algebra.FunctionProperties as FuncProp using (Op?) open import Relation.Binary using (_Preserves?_?_?_; Setoid) open import Relation.Binary.PropositionalEquality as PE using (_?_) record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier S)) : Set (? ? ?=) where open Setoid S using (_?_; Carrier) field ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ record Magma ? ?= : Set (suc (? ? ?=)) where -- non-standard but with `isMagma' constructor magma? field setoid : Setoid ? ?= open Setoid setoid public infixl 7 _?_ field _?_ : Op? Carrier isMagma : IsMagma setoid _?_ record Semigroup ? ?= : Set (suc (? ? ?=)) -- without `isSemigroup' where constructor semigroup? field magma : Magma ? ?= open Magma magma using (_?_; _?_) module FP? = FuncProp _?_ field ?-assoc : FP?.Associative _?_ -- The proper part ================================================= -- Magma? is parameterized by a certain representation of arbitrary -- magma over _?_. module Magma? {?} (C : Set ?) (_?_ : Op? C) (let setoid? = PE.setoid C) (isMagma? : IsMagma setoid? _?_) where magma? : Magma ? _ magma? = magma? setoid? _?_ isMagma? module FP? = FuncProp (_?_ {A = C}) ------------------------------------------------------------------- -- Semigroup? is parameterized by a certain representation of -- arbitrary semigroup over _?_, -- and semigroup? below is an arbitrary semigroup over _?_. module Semigroup? (?assoc : FP?.Associative _?_) where semigroup? : Semigroup ? _ semigroup? = semigroup? magma? ?assoc {- ... -} -------------------------------------------------------------------- > On Sun, Mar 17, 2019 at 2:52 AM Sergei Meshveliani > wrote: > > On Sat, 2019-03-16 at 18:16 +0800, Matthew Daggitt wrote: > >[..] > > > If this is the only reason, then it occurs that `Is' > structure > > is needed only in few cases. > > > > > > I think your examples miss the point. For example take any > binary > > operator. That binary operator may form many different > > Semigroups/Monoids/Groups etc. depending on what the > underlying > > equality is. The `Is` structures allow you to expose which > equality > > you're using at a particular point, whereas your suggestion > would hide > > it. > > > A Semigroup can be only on some (magma : Magma _ _). This > `magma' > already has an instance of _?_ and of _?_. > What freedom has one to define (H : Semigroup _ _) on this > particular > (magma : Magma _ _) ? > The only freedom is to choose a proof for Associative _?_ > _?_, > because _?_ and _?_ are already fixed, they are brought in by > "open Setoid setoid ...". > So the matter here is only in the proof relevance. > > For defining Magma on the given (S : Setoid), there is more > freedom. > _?_ is fixed, but _?_ may be implemented in different ways. > > > > The `Is` structures allow you to expose which equality > you're using at > > a particular point, whereas your suggestion would hide it. > > No, in the experimental tower (let us call it so) the equality > and all > operations are exposed by the `open' declaration: > > -- experimental > ------------------------------------------------------- > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > (Setoid.Carrier S)) : > Set > (? ? ?=) > where > open Setoid S using (_?_; Carrier) > field > ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > record Magma ? ?= : Set (suc (? ? ?=)) > where > field setoid : Setoid ? ?= > > open Setoid setoid public > infixl 7 _?_ > > field _?_ : Op? Carrier > isMagma : IsMagma setoid _?_ > > record Semigroup ? ?= : Set (suc (? ? ?=)) -- non-standard > where > field magma : Magma ? ?= > > open Magma magma using (_?_; _?_) > module FP? = FuncProp _?_ > > field ?-assoc : FP?.Associative _?_ > -------------------------------------------------------------------------- > > Here IsMagma (isMagma) is preserved as in standard, because > this enables > us to define different Magmae on the same (S : Setoid). > But IsSemigroup (isSemigroup) is skipped, because it is not > possible to > define different semigroups on the given (magma : Magma) > -- if only we ignore difference in proofs for FP?.Associative > _?_. > > Now I think that IsSemigroup is all right. > But repeated fields of Carrier, _?_, and such, look strange to > me. > > Regards, > > ------ > Sergei > > > From mechvel at botik.ru Wed Mar 20 19:34:13 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 20 Mar 2019 21:34:13 +0300 Subject: [Agda] built-in divMod Message-ID: <1553106853.2350.30.camel@one.mechvel.pereslavl.ru> Dear standard library developers, As I understand, (1) the certified Nat arithmetic is exponentially slow, due to unary representation, (2) due to this, it is added a non-certified built-in arithmetic for Nat, including the predicates _??_; _ References: <1553106853.2350.30.camel@one.mechvel.pereslavl.ru> Message-ID: agda-prelude has efficient certified divMod (though not gmp-efficient of course), without postulating any properties. See https://github.com/UlfNorell/agda-prelude/blob/master/src/Numeric/Nat/DivMod.agda / Ulf On Wed, Mar 20, 2019 at 7:34 PM Sergei Meshveliani wrote: > Dear standard library developers, > > As I understand, > (1) the certified Nat arithmetic is exponentially slow, due to unary > representation, > (2) due to this, it is added a non-certified built-in arithmetic for > Nat, including the predicates _??_; _ > But is there a fast built-in divMod for Nat ? > > For I do not see, how (2) can help with fast GCD, and hence with a fast > _rational_ number arithmetic over Nat and Integer. > > In scientific computation rational numbers are used as widely as > Integer, strongly needed. > > On the other hand, a fast divMod will allow us to program in Agda a fast > gcd and fast rational arithmetic over Nat (Integer) > (if I am not missing something, for this is difficult to make sure > without trying to write the code). > > This (divMod a b b\=0) can, say, return (quot , rem) : Nat x Nat, > and the proofs for > T (a ?? a * quot + rem), T (rem > can be postulated in the library. > As many non-certified things for Nat are already included, why do not > add built-in divMod ? I hope this will be the last one. > Probably it is somewhere in the gmp library (used in GHC ?). > > Am I missing something? > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From christos.rodosthenous at ouc.ac.cy Wed Mar 20 20:38:27 2019 From: christos.rodosthenous at ouc.ac.cy (Christos Rodosthenous) Date: Wed, 20 Mar 2019 19:38:27 +0000 Subject: [Agda] 2nd CFP: 3rd International Workshop on User-Oriented Logic Paradigms In-Reply-To: References: Message-ID: *** IULP 2019 *** 3rd International Workshop on User-Oriented Logic Paradigms June 3 or 4, 2019 https://iulp2019.uni-leipzig.de Collocated with the 15th International Conference on Logic Programming and Nonmonotonic Reasoning (LPNMR 2019) Philadelphia, USA June 4 - 6, 2019 -------------------------------------------- Since the emergence of logic reasoning paradigms, such as logic programming, argumentation, and other non-monotonic reasoning formalisms, a lot of theoretical work has been done, for example with respect to different semantics and their properties. More recently, implementations and IDEs emerged which have been used for various problem-solving applications. However, user-friendliness is still an issue for both experts and non-experts working with logic paradigms; for example experts benefit from features like debugging and heuristic tuning, non-experts from educational material, explanations, and intuitive visualisations - all of which are ongoing topics of research. The 3rd International Workshop of User-Oriented Logic Paradigms (IULP) focuses on discussing different aspects involved in making logic paradigms more user-friendly/oriented, where the "user" could be either an expert of the paradigm, or a non-expert who simply uses tools developed for the paradigm in some application. IULP aims to bring together researchers working on different logic paradigms, such as answer set programming, constraint logic programming, probabilistic logic programming, abductive logic programming, inductive logic programming, argumentation, principles of teaching etc., as user- friendliness is an important topic in all of these areas. IULP aims to provide an international forum for researchers in the AI, KR, and applied sciences community to discuss and present advances in theories, formalisms, and applications to deliver the mature and well-defined methods of logic paradigms to a wider audience. We solicit the submission of papers broadly centred on issues and research related to user-friendliness in logic paradigms and related fields. We welcome papers of either theoretical or practical nature, including work in progress. IMPORTANT DATES -------------------------------------------- * Submission deadline: Sun, March 31st 2019 * Notification to authors: Mon, April 29th 2019 * Camera-ready version due: Mon, May 20th 2019 * Workshop date: June 3 or 4, 2019 TOPICS -------------------------------------------- Topics of interest include (but are not limited to): * IDEs * debugging * explanations * visualisation * best practice * modularity * usage of natural language * heuristic tuning * LP education * language extensions * transparency * algorithmic bias * credibility * accountable systems SUBMISSIONS -------------------------------------------- Papers must be formatted in Springer LNCS style (http://www.springer.com/lncs) and should not exceed 13 pages (excluding references and appendices). All submissions have to be written in English and submitted electronically as a PDF through easychair (https://easychair.org/conferences/?conf=iulp2019). A short system demonstration version which should not exceed 6 pages (excluding references and appendices) can be submitted electronically too. We encourage the submission of original research on all topics as well as relevant results that have been submitted or accepted elsewhere provided that the initial publication is mentioned in a footnote on the first page. Note that authorship is not anonymous and that at least one author of each accepted paper is required to attend the workshop to present the contribution. PROCEEDINGS -------------------------------------------- There are no formal proceedings for IULP. The accepted papers will be published as a technical report and will be made available in the Computing Research Repository (CoRR). The copyright of the papers lies with the authors and, as far as IULP is concerned, authors are free to submit their work to other conferences and workshops. COMMITTEE -------------------------------------------- Chairs: * Stefan Ellmauthaler (Leipzig University) * Christos Rodosthenous (Open University of Cyprus) Program Committee * Bart Bogaerts (Vrije Universiteit Brussel) * Gerhard Brewka (Leipzig University) * Marina De Vos (University of Bath) * Marc Denecker (Katholieke Universiteit Leuven) * Martin Gebser (Potsdam University) * Antonis C. Kakas (University of Cyprus) * Antonio Lieto (University of Turin) * Loizos Michael (Open University of Cyprus) * Yisong Wang (Guizhou University) * Stefan Woltran (Vienna University of Technology) CONTACT -------------------------------------------- iulp2019 [at] informatik [dot] uni-leipzig [dot] de HOMEPAGE -------------------------------------------- https://iulp2019.uni-leipzig.de -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 4190 bytes Desc: not available URL: From mechvel at botik.ru Wed Mar 20 21:43:03 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 20 Mar 2019 23:43:03 +0300 Subject: [Agda] built-in divMod Message-ID: <1553114583.2375.54.camel@one.mechvel.pereslavl.ru> (I have forgotten to copy it to the list) > agda-prelude has efficient certified divMod (though not gmp-efficient > of course), without postulating any properties. See > https://github.com/UlfNorell/agda-prelude/blob/master/src/Numeric/Nat/DivMod.agda > > / Ulf Hi, Ulf. As I recall, my DoCon-A-2.* uses fast divMod of your Agda Prelude, (about two year old matter), by caring only of the signature, without understanding the method, nor the implementation. And my current question is about a way to continue Standard, by a single minimal step related to divMod only, while Agda Prelude by Ulf Norell announced that is is totally diversed from standard. What built-ins is used in your Agda Prelude for efficient divMod ? Can you explain in simple words, what is the mathematical method? (it is difficult to understand the method just from the bare code). Suppose we have to find divMod a b. I do not know, is it by finding (maximal n such that (times n b <= a)) by the binary method? b, b1 = b+b; b2 = b1+b1, ..., where _+_ and (compare b(i) a) are fast (built-in) -- is this the method? If it has O(log a) fast additions, then it is all right, then this divMod can be programmed in Agda and put to Standard. This will be still better than adding one more built-in. I thought of this for the first time. -- SM From m.escardo at cs.bham.ac.uk Thu Mar 21 01:18:26 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Thu, 21 Mar 2019 00:18:26 +0000 Subject: [Agda] Univalent foundations in Agda lecture notes Message-ID: <0f8ce009-6556-0870-01f9-03f4246d87aa@cs.bham.ac.uk> I would like to advertise these lecture notes on univalent foundations of mathematics with Agda: https://www.cs.bham.ac.uk/~mhe/HoTT-UF-in-Agda-Lecture-Notes/index.html Issues and pull requests via github are welcome. (This relies on the pre-released version 2.6.0 of Agda, mainly for `variables` and for the new options for generating html from Agda literate code. I thank the dedicated development team.) Martin From matthewdaggitt at gmail.com Thu Mar 21 02:39:23 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 21 Mar 2019 09:39:23 +0800 Subject: [Agda] algebra hierarchy in library In-Reply-To: <1553092793.2396.17.camel@one.mechvel.pereslavl.ru> References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> <1552762357.2360.43.camel@one.mechvel.pereslavl.ru> <1553092793.2396.17.camel@one.mechvel.pereslavl.ru> Message-ID: Would you agree that writing module Semigroup? {a} {A : Set a} {_?_ : Op? A} (isSemigroup : IsSemigroup _?_ _?_) where is easier than writing the "proper part" you've got above? On Wed, Mar 20, 2019 at 10:39 PM Sergei Meshveliani wrote: > On Wed, 2019-03-20 at 11:44 +0800, Matthew Daggitt wrote: > > Say you have a module and you want to parameterise it by a semigroup > > that must use propositional equality. How would you do that using your > > hierarchy? > > > Let me try. > The prelude is the definition of Magma and Semigroup by the approach II: > a) with isMagma, b) without isSemigroup, > c) without repeating fields. > > Then, module Semigroup? is a submodule in module Magma?. > But it can be also declared as a top level module, with joining > parameters C, _?_, isMagma?. > > What is wrong here? > > -- > SM > > > --==================================================================== > open import Level using (suc; _?_) > open import Algebra.FunctionProperties as FuncProp using (Op?) > open import Relation.Binary using (_Preserves?_?_?_; Setoid) > open import Relation.Binary.PropositionalEquality as PE using (_?_) > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier S)) : > Set (? ? ?=) > where > open Setoid S using (_?_; Carrier) > field > ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > record Magma ? ?= : Set (suc (? ? ?=)) > where -- non-standard but with `isMagma' > constructor magma? > > field setoid : Setoid ? ?= > > open Setoid setoid public > infixl 7 _?_ > > field _?_ : Op? Carrier > isMagma : IsMagma setoid _?_ > > > record Semigroup ? ?= : Set (suc (? ? ?=)) -- without `isSemigroup' > where > constructor semigroup? > > field magma : Magma ? ?= > > open Magma magma using (_?_; _?_) > module FP? = FuncProp _?_ > > field ?-assoc : FP?.Associative _?_ > > > -- The proper part ================================================= > -- Magma? is parameterized by a certain representation of arbitrary > -- magma over _?_. > > module Magma? {?} (C : Set ?) (_?_ : Op? C) > (let setoid? = PE.setoid C) > (isMagma? : IsMagma setoid? _?_) > where > magma? : Magma ? _ > magma? = magma? setoid? _?_ isMagma? > > module FP? = FuncProp (_?_ {A = C}) > > ------------------------------------------------------------------- > -- Semigroup? is parameterized by a certain representation of > -- arbitrary semigroup over _?_, > -- and semigroup? below is an arbitrary semigroup over _?_. > > module Semigroup? (?assoc : FP?.Associative _?_) > where > semigroup? : Semigroup ? _ > semigroup? = semigroup? magma? ?assoc > > {- > ... > -} > -------------------------------------------------------------------- > > > > > > > > On Sun, Mar 17, 2019 at 2:52 AM Sergei Meshveliani > > wrote: > > > > On Sat, 2019-03-16 at 18:16 +0800, Matthew Daggitt wrote: > > >[..] > > > > > If this is the only reason, then it occurs that `Is' > > structure > > > is needed only in few cases. > > > > > > > > > I think your examples miss the point. For example take any > > binary > > > operator. That binary operator may form many different > > > Semigroups/Monoids/Groups etc. depending on what the > > underlying > > > equality is. The `Is` structures allow you to expose which > > equality > > > you're using at a particular point, whereas your suggestion > > would hide > > > it. > > > > > > A Semigroup can be only on some (magma : Magma _ _). This > > `magma' > > already has an instance of _?_ and of _?_. > > What freedom has one to define (H : Semigroup _ _) on this > > particular > > (magma : Magma _ _) ? > > The only freedom is to choose a proof for Associative _?_ > > _?_, > > because _?_ and _?_ are already fixed, they are brought in by > > "open Setoid setoid ...". > > So the matter here is only in the proof relevance. > > > > For defining Magma on the given (S : Setoid), there is more > > freedom. > > _?_ is fixed, but _?_ may be implemented in different ways. > > > > > > > The `Is` structures allow you to expose which equality > > you're using at > > > a particular point, whereas your suggestion would hide it. > > > > No, in the experimental tower (let us call it so) the equality > > and all > > operations are exposed by the `open' declaration: > > > > -- experimental > > ------------------------------------------------------- > > > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > > (Setoid.Carrier S)) : > > Set > > (? ? ?=) > > where > > open Setoid S using (_?_; Carrier) > > field > > ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > > > record Magma ? ?= : Set (suc (? ? ?=)) > > where > > field setoid : Setoid ? ?= > > > > open Setoid setoid public > > infixl 7 _?_ > > > > field _?_ : Op? Carrier > > isMagma : IsMagma setoid _?_ > > > > record Semigroup ? ?= : Set (suc (? ? ?=)) -- non-standard > > where > > field magma : Magma ? ?= > > > > open Magma magma using (_?_; _?_) > > module FP? = FuncProp _?_ > > > > field ?-assoc : FP?.Associative _?_ > > > -------------------------------------------------------------------------- > > > > Here IsMagma (isMagma) is preserved as in standard, because > > this enables > > us to define different Magmae on the same (S : Setoid). > > But IsSemigroup (isSemigroup) is skipped, because it is not > > possible to > > define different semigroups on the given (magma : Magma) > > -- if only we ignore difference in proofs for FP?.Associative > > _?_. > > > > Now I think that IsSemigroup is all right. > > But repeated fields of Carrier, _?_, and such, look strange to > > me. > > > > Regards, > > > > ------ > > Sergei > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Mar 21 11:18:41 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 21 Mar 2019 13:18:41 +0300 Subject: [Agda] algebra hierarchy in library In-Reply-To: References: <1552057200.2379.22.camel@one.mechvel.pereslavl.ru> <1552131352.2629.86.camel@one.mechvel.pereslavl.ru> <1552140496.2392.15.camel@one.mechvel.pereslavl.ru> <1552147723.2304.36.camel@one.mechvel.pereslavl.ru> <1552156087.2345.18.camel@one.mechvel.pereslavl.ru> <1552762357.2360.43.camel@one.mechvel.pereslavl.ru> <1553092793.2396.17.camel@one.mechvel.pereslavl.ru> Message-ID: <1553163521.2356.15.camel@one.mechvel.pereslavl.ru> On Thu, 2019-03-21 at 09:39 +0800, Matthew Daggitt wrote: > Would you agree that writing > > > module Semigroup? {a} {A : Set a} {_?_ : Op? A} > (isSemigroup : IsSemigroup _?_ _?_) where > > is easier than writing the "proper part" you've got above? The "proper part" can be written shorter as module Semigroup? {?} {C : Set ?} (_?_ : Op? A) (isMagma? : IsMagma (PE.setoid A) _?_) (?assoc : Associative' _?_ _?_) where , where Associative' is the variant of Associative that takes equality instead of a setoid. Still your version is simpler. I see, thank you. ------ Sergei > On Wed, Mar 20, 2019 at 10:39 PM Sergei Meshveliani > wrote: > > On Wed, 2019-03-20 at 11:44 +0800, Matthew Daggitt wrote: > > Say you have a module and you want to parameterise it by a > semigroup > > that must use propositional equality. How would you do that > using your > > hierarchy? > > > Let me try. > The prelude is the definition of Magma and Semigroup by the > approach II: > a) with isMagma, b) without isSemigroup, > c) without repeating fields. > > Then, module Semigroup? is a submodule in module Magma?. > But it can be also declared as a top level module, with > joining > parameters C, _?_, isMagma?. > > What is wrong here? > > -- > SM > > > --==================================================================== > open import Level using (suc; _?_) > open import Algebra.FunctionProperties as FuncProp using (Op?) > open import Relation.Binary using (_Preserves?_?_?_; Setoid) > open import Relation.Binary.PropositionalEquality as PE using > (_?_) > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > (Setoid.Carrier S)) : > Set > (? ? ?=) > where > open Setoid S using (_?_; Carrier) > field > ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > record Magma ? ?= : Set (suc (? ? ?=)) > where -- non-standard but with > `isMagma' > constructor magma? > > field setoid : Setoid ? ?= > > open Setoid setoid public > infixl 7 _?_ > > field _?_ : Op? Carrier > isMagma : IsMagma setoid _?_ > > > record Semigroup ? ?= : Set (suc (? ? ?=)) -- without > `isSemigroup' > where > constructor semigroup? > > field magma : Magma ? ?= > > open Magma magma using (_?_; _?_) > module FP? = FuncProp _?_ > > field ?-assoc : FP?.Associative _?_ > > > -- The proper part > ================================================= > -- Magma? is parameterized by a certain representation of > arbitrary > -- magma over _?_. > > module Magma? {?} (C : Set ?) (_?_ : Op? C) > (let setoid? = PE.setoid C) > (isMagma? : IsMagma setoid? _?_) > where > magma? : Magma ? _ > magma? = magma? setoid? _?_ isMagma? > > module FP? = FuncProp (_?_ {A = C}) > > > ------------------------------------------------------------------- > -- Semigroup? is parameterized by a certain representation > of > -- arbitrary semigroup over _?_, > -- and semigroup? below is an arbitrary semigroup over > _?_. > > module Semigroup? (?assoc : FP?.Associative _?_) > where > semigroup? : Semigroup ? _ > semigroup? = semigroup? magma? ?assoc > > {- > ... > -} > -------------------------------------------------------------------- > > > > > > > > On Sun, Mar 17, 2019 at 2:52 AM Sergei Meshveliani > > > wrote: > > > > On Sat, 2019-03-16 at 18:16 +0800, Matthew Daggitt > wrote: > > >[..] > > > > > If this is the only reason, then it occurs > that `Is' > > structure > > > is needed only in few cases. > > > > > > > > > I think your examples miss the point. For example > take any > > binary > > > operator. That binary operator may form many > different > > > Semigroups/Monoids/Groups etc. depending on what > the > > underlying > > > equality is. The `Is` structures allow you to > expose which > > equality > > > you're using at a particular point, whereas your > suggestion > > would hide > > > it. > > > > > > A Semigroup can be only on some (magma : Magma _ _). > This > > `magma' > > already has an instance of _?_ and of _?_. > > What freedom has one to define (H : Semigroup _ _) > on this > > particular > > (magma : Magma _ _) ? > > The only freedom is to choose a proof for > Associative _?_ > > _?_, > > because _?_ and _?_ are already fixed, they are > brought in by > > "open Setoid setoid ...". > > So the matter here is only in the proof relevance. > > > > For defining Magma on the given (S : Setoid), there > is more > > freedom. > > _?_ is fixed, but _?_ may be implemented in > different ways. > > > > > > > The `Is` structures allow you to expose which > equality > > you're using at > > > a particular point, whereas your suggestion would > hide it. > > > > No, in the experimental tower (let us call it so) > the equality > > and all > > operations are exposed by the `open' declaration: > > > > -- experimental > > > ------------------------------------------------------- > > > > record IsMagma {? ?=} (S : Setoid ? ?=) (_?_ : Op? > > (Setoid.Carrier S)) : > > > Set > > (? ? ?=) > > where > > open Setoid S using (_?_; Carrier) > > field > > ?-cong : _?_ Preserves? _?_ ? _?_ ? _?_ > > > > record Magma ? ?= : Set (suc (? ? ?=)) > > where > > field setoid : Setoid ? ?= > > > > open Setoid setoid public > > infixl 7 _?_ > > > > field _?_ : Op? Carrier > > isMagma : IsMagma setoid _?_ > > > > record Semigroup ? ?= : Set (suc (? ? ?=)) -- > non-standard > > where > > field magma : Magma ? ?= > > > > open Magma magma using (_?_; _?_) > > module FP? = FuncProp _?_ > > > > field ?-assoc : FP?.Associative _?_ > > > -------------------------------------------------------------------------- > > > > Here IsMagma (isMagma) is preserved as in standard, > because > > this enables > > us to define different Magmae on the same (S : > Setoid). > > But IsSemigroup (isSemigroup) is skipped, because it > is not > > possible to > > define different semigroups on the given (magma : > Magma) > > -- if only we ignore difference in proofs for > FP?.Associative > > _?_. > > > > Now I think that IsSemigroup is all right. > > But repeated fields of Carrier, _?_, and such, look > strange to > > me. > > > > Regards, > > > > ------ > > Sergei > > > > > > > > From mechvel at botik.ru Thu Mar 21 13:22:40 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 21 Mar 2019 15:22:40 +0300 Subject: [Agda] Univalent foundations in Agda lecture notes In-Reply-To: <0f8ce009-6556-0870-01f9-03f4246d87aa@cs.bham.ac.uk> References: <0f8ce009-6556-0870-01f9-03f4246d87aa@cs.bham.ac.uk> Message-ID: <1553170960.2346.42.camel@one.mechvel.pereslavl.ru> On Thu, 2019-03-21 at 00:18 +0000, Martin Escardo wrote: > I would like to advertise these lecture notes on univalent foundations > of mathematics with Agda: > > https://www.cs.bham.ac.uk/~mhe/HoTT-UF-in-Agda-Lecture-Notes/index.html > > Issues and pull requests via github are welcome. > > (This relies on the pre-released version 2.6.0 of Agda, mainly for > `variables` and for the new options for generating html from Agda > literate code. I thank the dedicated development team.) > During many years the appear books which titles include the words "foundations of mathematics", while they are actually about various _set theory formalisms_ and logic tools. This leads students to misunderstanding of certain basic things. I suggest to correct these words in their titles to something like "basic formalisms for mathematics". Any set theory formalism cannot be a foundation of mathematics. For example, Archimedes and Newton were great mathematicians, and they knew foundations of mathematics, but they knew nothing about the set theory formalisms, nor of univalent foundations. Mathematics is about _solving problems_. For example, "find a formula for the square of a sphere". Foundation of mathematics consists of certain basic approaches and methods for solving such problems. And any set theory formalism is only way to write a proof for solution after such is found, so that there will be a hope that it can be more or less automatically checked. It is not about methods to search a solution. Regards, ------ Sergei From m.escardo at cs.bham.ac.uk Thu Mar 21 17:42:32 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Thu, 21 Mar 2019 16:42:32 +0000 Subject: [Agda] Univalent foundations in Agda lecture notes In-Reply-To: <1553170960.2346.42.camel@one.mechvel.pereslavl.ru> References: <0f8ce009-6556-0870-01f9-03f4246d87aa@cs.bham.ac.uk> <1553170960.2346.42.camel@one.mechvel.pereslavl.ru> Message-ID: <81d43e7e-6d68-fa79-afe6-5bd801835976@cs.bham.ac.uk> Dear Sergei, Yes, I also don't like "foundations" too much, and often speak of "univalent mathematics". But "univalent foundations" is a brand name, and the notes are about what goes under this name. Moreover, and these notes are about both "univalent foundations" (including the type theory under consideration, and the foundational mathematical development of the fundamental notions (hlevels, equivalences, univalence)) *and* "univalent mathematics" (once we have the foundations in place). Martin On 21/03/2019 12:22, mechvel at botik.ru wrote: > On Thu, 2019-03-21 at 00:18 +0000, Martin Escardo wrote: >> I would like to advertise these lecture notes on univalent foundations >> of mathematics with Agda: >> >> https://www.cs.bham.ac.uk/~mhe/HoTT-UF-in-Agda-Lecture-Notes/index.html >> >> Issues and pull requests via github are welcome. >> >> (This relies on the pre-released version 2.6.0 of Agda, mainly for >> `variables` and for the new options for generating html from Agda >> literate code. I thank the dedicated development team.) >> > > During many years the appear books which titles include the words > "foundations of mathematics", while they are actually about various > _set theory formalisms_ and logic tools. > > This leads students to misunderstanding of certain basic things. > > I suggest to correct these words in their titles to something like > "basic formalisms for mathematics". > > Any set theory formalism cannot be a foundation of mathematics. > For example, Archimedes and Newton were great mathematicians, and they > knew foundations of mathematics, but they knew nothing about the set > theory formalisms, nor of univalent foundations. > > Mathematics is about _solving problems_. For example, "find a formula > for the square of a sphere". > Foundation of mathematics consists of certain basic approaches and > methods for solving such problems. > And any set theory formalism is only way to write a proof for solution > after such is found, so that there will be a hope that it can be more or > less automatically checked. > It is not about methods to search a solution. > > Regards, > > ------ > Sergei > > > > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From ulf.norell at gmail.com Fri Mar 22 10:30:15 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Fri, 22 Mar 2019 10:30:15 +0100 Subject: [Agda] built-in divMod In-Reply-To: <1553114226.2375.50.camel@one.mechvel.pereslavl.ru> References: <1553106853.2350.30.camel@one.mechvel.pereslavl.ru> <1553114226.2375.50.camel@one.mechvel.pereslavl.ru> Message-ID: On Wed, Mar 20, 2019 at 9:37 PM Sergei Meshveliani wrote: > > What built-ins is used in your Agda Prelude for efficient divMod ? > Can you explain in simple words, what is the mathematical method? > (it is difficult to understand the method just from the bare code). > I'm using the div-helper and mod-helper functions from Agda.Builtin.Nat. If you look at the code it contains an explanation of what they do. What makes it fast is that these functions are computed using Haskell integer div and mod for closed numbers, but they still have an Agda definition which makes it possible to prove properties about them. / Ulf -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Fri Mar 22 21:55:09 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 22 Mar 2019 23:55:09 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: References: Message-ID: <1553288109.2295.35.camel@one.mechvel.pereslavl.ru> On Fri, 2019-03-15 at 12:41 +0000, Andres Sicard Ramirez wrote: > Dear all, > > The Agda Team is very pleased to announce the first release candidate > of Agda 2.6.0. > [..] I observe a certain effect related to folders and `-c' option (MAlonzo). Consider the two modules: M1.agda residing in the $root, M2.agda residing in $root/Foo/ : M1.agda Foo/M2.agda -------------------- M2.agda ---------- -- module Foo.M2 where open import M1 main : ... main = ... --------------------------------------- Case the header "module Foo.M2 where" is skipped -------------------------------------------------- If M2 is type-checked by > cd Foo > emacs M2.agda > C-c C-l then M1 is not found. If M2 is `made' by > cd Foo > agda -c $libOptions M2.agda then M1 is found, and the executable is Foo/M2 Case the header "module Foo.M2 where" is set ---------------------------------------------- Here > cd Foo > emacs M2.agda > C-c C-l type-checks it, and > cd Foo > agda -c $libOptions M2.agda puts executable to root/M2 I somehow hesitate whether to set the `module' header in M2.agda and from which folder to command "agda -c". Users will `make' the executable, it will appear in different folders, and users will often run the executable residing in an un-expected folder. I wonder, how to avoid a confusion. Thanks, ------ Sergei From nad at cse.gu.se Sun Mar 24 13:00:14 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Sun, 24 Mar 2019 13:00:14 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: <1553288109.2295.35.camel@one.mechvel.pereslavl.ru> References: <1553288109.2295.35.camel@one.mechvel.pereslavl.ru> Message-ID: <0e7106ff-c961-ccc2-bb80-582213d8b068@cse.gu.se> On 22/03/2019 21.55, Sergei Meshveliani wrote: > I somehow hesitate whether to set the `module' header in M2.agda I suggest that you always include the module header in files that are intended to be imported from other files. -- /NAD From mechvel at botik.ru Sun Mar 24 17:39:58 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sun, 24 Mar 2019 19:39:58 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: <0e7106ff-c961-ccc2-bb80-582213d8b068@cse.gu.se> References: <1553288109.2295.35.camel@one.mechvel.pereslavl.ru> <0e7106ff-c961-ccc2-bb80-582213d8b068@cse.gu.se> Message-ID: <1553445598.2356.7.camel@one.mechvel.pereslavl.ru> On Sun, 2019-03-24 at 13:00 +0100, Nils Anders Danielsson wrote: > On 22/03/2019 21.55, Sergei Meshveliani wrote: > > I somehow hesitate whether to set the `module' header in M2.agda > > I suggest that you always include the module header in files that are > intended to be imported from other files. > I always do so. In this my example, M2.agda * defines `main' function, * is not imported by any module, * and I hesitate whether to set the `module' header in M2.agda. (the effects are described below). -- SM ******************************************************* ... M1.agda Foo/M2.agda -------------------- M2.agda ---------- -- module Foo.M2 where open import M1 main : ... main = ... --------------------------------------- Case the header "module Foo.M2 where" is skipped -------------------------------------------------- If M2 is type-checked by > cd Foo > emacs M2.agda > C-c C-l then M1 is not found. If M2 is `made' by > cd Foo > agda -c $libOptions M2.agda then M1 is found, and the executable is Foo/M2 Case the header "module Foo.M2 where" is set ---------------------------------------------- Here > cd Foo > emacs M2.agda > C-c C-l type-checks it, and > cd Foo > agda -c $libOptions M2.agda puts executable to root/M2 I somehow hesitate whether to set the `module' header in M2.agda and from which folder to command "agda -c". Users will `make' the executable, it will appear in different folders, and users will often run the executable residing in an un-expected folder. I wonder, how to avoid a confusion. From mechvel at botik.ru Mon Mar 25 16:53:04 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Mon, 25 Mar 2019 18:53:04 +0300 Subject: [Agda] gcd, toDecimal performance Message-ID: <1553529184.2309.48.camel@one.mechvel.pereslavl.ru> Dear standard library developers, I wrote recently about the performance of divMod for Nat and rational arithmetics, and Ulf issued some comments. But now I discover news, when look into Dat.Nat/ in the experimental lib branch for Agda-2.6.0-candidate. There appear _??_, _ divMod n 10) a few times. Am I missing something? Can you, please, fix these two features? I guess this is not difficult, because standard library currently has all the needed fast functions. Please try the _attached test_. It reads n : Nat from data.txt (n = 10, 11, 12, ...); computes fs = factorials n = [0!, 1!, ..., n!] (12! is not so large); computes x % n, (x div n) % n for x <- fs; prints x % n, (x div n) % n for x <- fs. prints gcd! x n for x <- fs; -- II prints fs. -- III For n = 12, all this is done in a moment - except II and III. II takes very long, III takes very long. I guess this illustrates the conclusions (1) and (2). Does it? Can you, please, look into the subject? I have an impressions that these things can be fixed easily. Thanks, ------ Sergei -------------- next part -------------- open import Foreign.Haskell open import IO.Primitive open import Codata.Musical.Costring using (toCostring) open import Function using (_?_; case_of_) open import Algebra.FunctionProperties using (Op?) open import Relation.Nullary using (yes; no) open import Relation.Unary using (Decidable) open import Relation.Binary.PropositionalEquality using (_?_; refl) open import Data.Product using (_?_; _,_; _,?_; proj?; proj?) open import Data.List using (List; []; _?_; [_]; reverse; map; foldr; filter) open import Data.Char as Char using (Char) open import Data.String as Str using (String) renaming (_++_ to _++s_) open import Data.Nat using (?; suc; _+_; _?_; _*_; _?_; _??_) open import Data.Nat.Show using (show) open import Data.Nat.GCD using (gcd) open import Data.Nat.DivMod using (_div_; _%_) -- Begin-Prelude ------------------------------------------------------------- concatStr : List String ? String concatStr = foldr Str._++_ "" filterStr : ? {p} {P : Char ? Set p} ? Decidable P ? String ? String filterStr P? = Str.fromList ? filter P? ? Str.toList -- stringToNat; decimalDigit? showNats : List ? ? String showNats = concatStr ? map (\n ? "," ++s (show n)) isDecimapDigit : Char ? Set isDecimapDigit c = 48 ? n ? n ? 57 where n = Char.toNat c decimalDigit? : Decidable isDecimapDigit decimalDigit? c = let n = Char.toNat c in case ((48 ?? n) ,? (n ?? 57)) of \ { (yes le , yes le') ? yes (le , le') ; (yes _ , no n?57) ? no (n?57 ? proj?) ; (no 48?n , _ ) ? no (48?n ? proj?) } charToDecDigitNat : Char ? ? charToDecDigitNat c = (Char.toNat c) ? 48 readNat : List Char ? ? -- convert from decimal digit chars readNat = toN ? map charToDecDigitNat ? reverse where toN : List ? ? ? toN [] = 0 toN (j ? js) = j + (10 * (toN js)) stringToNat : String ? ? stringToNat = readNat ? Str.toList -- End-Prelude ---------------------------------------------------------------- factorials : ? ? List ? -- [factorial i | i <- [n .. 0]] factorials 0 = [ 1 ] factorials (suc n) = case factorials n of \ { (p ? fs) ? ((suc n) * p) ? p ? fs ; [] ? [] -- unaccessible } -- test : factorials 4 ? 24 ? 6 ? 2 ? 1 ? 1 ? [] -- test = refl gcd! : Op? ? gcd! n = proj? ? gcd n gcds : ? ? List ? gcds n = map (gcd! n) (factorials n) test : ? ? String test n = concatStr ("n = " ? show n ? "\nrems =\n " ? showNats rems ? "\nqRems =\n " ? showNats qRems -- ? "\nfactorials n =\n " ? showNats fs -- ? "\ngcds n =\n " ? showNats gs ? [] ) where fs = factorials n rems = map (\x ? x % (suc n)) fs quots = map (\x ? x div (suc n)) fs qRems = map (\x ? x % (suc n)) quots gs = gcds n main = (readFiniteFile "data.txt") >>= putStrLn ? toCostring ? g where g : String -> String g str = test n where n = stringToNat (filterStr decimalDigit? str) -- Put to data.txt n = -- 9, 10, 11, 12, ... -- -- and run > time ./NatGCDTest From mechvel at botik.ru Mon Mar 25 19:30:15 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Mon, 25 Mar 2019 21:30:15 +0300 Subject: [Agda] gcd, toDecimal performance In-Reply-To: <1553529184.2309.48.camel@one.mechvel.pereslavl.ru> References: <1553529184.2309.48.camel@one.mechvel.pereslavl.ru> Message-ID: <1553538615.2331.9.camel@one.mechvel.pereslavl.ru> Concerning printing large Nat: the following function show' : ? ? String prints large numbers many times faster than Data.Nat.Show.show, it is `exponentially' faster. So that the point III below can be fixed somewhat this way, and it remains the point II of gcd. --------------------------------------------------------------- LChar = List Char toDigitChar : (n : ?) ? Char toDigitChar n = Char.fromNat (n + 48) 1<10 : 1 < 10 1<10 = s?s (s?s z?n) {-# TERMINATING #-} toDecimalChars : ? ? LChar toDecimalChars x = aux x [] where aux : (n : ?) ? LChar ? LChar aux 0 = ('0' ?_) aux (suc n) = let q = (suc n) div 10 -- Only avoid _divMod_ r = (suc n) % 10 -- of the current Standard! c = toDigitChar r in case q ? 0 of \ { (yes _) ? (c ?_) ; (no _) ? aux q ? (c ?_) } show' : ? ? String show' = Str.fromList ? toDecimalChars test : show' 1090 ? "1090" test = refl ---------------------------------------------------------------------- -- SM On Mon, 2019-03-25 at 18:53 +0300, Sergei Meshveliani wrote: > Dear standard library developers, > > I wrote recently about the performance of divMod for Nat and rational > arithmetics, and Ulf issued some comments. > > But now I discover news, when look into Dat.Nat/ > in the > experimental lib branch for Agda-2.6.0-candidate. > > There appear _??_, _ > which use built-ins from GHC. > Also the attached test shows that mod (_%_) and _div_ are fast enough. > > (1) But gcd remains `exponentially' slow. > This is strange. Because gcd is usually found by applying divMod a few > times. > This slow gcd will actually break rational arithmetic. > > (2) Printing Nat (in decimal digits) is `exponentially' slow. > This is also strange. Because conversion from unary to decimal system > can be written as something like applying (\n -> divMod n 10) a few > times. > Am I missing something? > > Can you, please, fix these two features? > I guess this is not difficult, because standard library currently has > all the needed fast functions. > > Please try the _attached test_. > > It > reads n : Nat from data.txt (n = 10, 11, 12, ...); > > computes fs = factorials n = [0!, 1!, ..., n!] > (12! is not so large); > computes x % n, (x div n) % n for x <- fs; > prints x % n, (x div n) % n for x <- fs. > > prints gcd! x n for x <- fs; -- II > prints fs. -- III > > > For n = 12, all this is done in a moment - except II and III. > II takes very long, > III takes very long. > > I guess this illustrates the conclusions (1) and (2). > Does it? > > Can you, please, look into the subject? > I have an impressions that these things can be fixed easily. > > Thanks, > > ------ > Sergei > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From matthewdaggitt at gmail.com Tue Mar 26 02:39:07 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Tue, 26 Mar 2019 09:39:07 +0800 Subject: [Agda] gcd, toDecimal performance In-Reply-To: <1553538615.2331.9.camel@one.mechvel.pereslavl.ru> References: <1553529184.2309.48.camel@one.mechvel.pereslavl.ru> <1553538615.2331.9.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, Glad to hear that we've managed to speed up `div` and `mod` for you. Yes, the code for GCD and LCM is quite old at this point and can probably be made more efficient. Probably best to make an issue on the standard library Github and then either you, or if you're lucky someone else, will get around to doing it. Best, Matthew On Tue, Mar 26, 2019 at 2:30 AM Sergei Meshveliani wrote: > Concerning printing large Nat: > > the following function show' : ? ? String > > prints large numbers many times faster than Data.Nat.Show.show, > it is `exponentially' faster. > So that the point III below can be fixed somewhat this way, > and it remains the point II of gcd. > > --------------------------------------------------------------- > LChar = List Char > > toDigitChar : (n : ?) ? Char > toDigitChar n = > Char.fromNat (n + 48) > > 1<10 : 1 < 10 > 1<10 = s?s (s?s z?n) > > {-# TERMINATING #-} > toDecimalChars : ? ? LChar > toDecimalChars x = aux x [] > where > aux : (n : ?) ? LChar ? LChar > aux 0 = ('0' ?_) > aux (suc n) = > let q = (suc n) div 10 -- Only avoid _divMod_ > r = (suc n) % 10 -- of the current Standard! > c = toDigitChar r > in > case q ? 0 of \ { (yes _) ? (c ?_) > ; (no _) ? aux q ? (c ?_) } > > show' : ? ? String > show' = Str.fromList ? toDecimalChars > > test : show' 1090 ? "1090" > test = refl > ---------------------------------------------------------------------- > > > -- > SM > > > > On Mon, 2019-03-25 at 18:53 +0300, Sergei Meshveliani wrote: > > Dear standard library developers, > > > > I wrote recently about the performance of divMod for Nat and rational > > arithmetics, and Ulf issued some comments. > > > > But now I discover news, when look into Dat.Nat/ > > in the > > experimental lib branch for Agda-2.6.0-candidate. > > > > There appear _??_, _ > > > which use built-ins from GHC. > > Also the attached test shows that mod (_%_) and _div_ are fast enough. > > > > (1) But gcd remains `exponentially' slow. > > This is strange. Because gcd is usually found by applying divMod a few > > times. > > This slow gcd will actually break rational arithmetic. > > > > (2) Printing Nat (in decimal digits) is `exponentially' slow. > > This is also strange. Because conversion from unary to decimal system > > can be written as something like applying (\n -> divMod n 10) a few > > times. > > Am I missing something? > > > > Can you, please, fix these two features? > > I guess this is not difficult, because standard library currently has > > all the needed fast functions. > > > > Please try the _attached test_. > > > > It > > reads n : Nat from data.txt (n = 10, 11, 12, ...); > > > > computes fs = factorials n = [0!, 1!, ..., n!] > > (12! is not so large); > > computes x % n, (x div n) % n for x <- fs; > > prints x % n, (x div n) % n for x <- fs. > > > > prints gcd! x n for x <- fs; -- II > > prints fs. -- III > > > > > > For n = 12, all this is done in a moment - except II and III. > > II takes very long, > > III takes very long. > > > > I guess this illustrates the conclusions (1) and (2). > > Does it? > > > > Can you, please, look into the subject? > > I have an impressions that these things can be fixed easily. > > > > Thanks, > > > > ------ > > Sergei > > > > > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Dominique.Devriese at vub.be Tue Mar 26 11:37:02 2019 From: Dominique.Devriese at vub.be (Dominique DEVRIESE) Date: Tue, 26 Mar 2019 10:37:02 +0000 Subject: [Agda] 1st CFP for Certified Programs and Proofs (CPP 2020 Message-ID: Certified Programs and Proofs (CPP) is an international conference on practical and theoretical topics in all areas that consider certification as an essential paradigm for their work. Certification here means formal, mechanized verification of some sort, preferably with the production of independently checkable certificates. CPP spans areas of computer science, mathematics, logics, and education. CPP 2020 will be held on 20-21 January 2020 in New Orleans, Louisiana, United States and will be co-located with POPL 2020. CPP 2020 is sponsored by ACM SIGPLAN, in cooperation with ACM SIGLOG. For more information about this edition and the CPP series please visit: https://popl20.sigplan.org/home/CPP-2020 ### Important Dates - Abstract Deadline: 16 October 2019 at 23:59 AoE (UTC-12h) - Paper Submission Deadline: 21 October 2019 at 23:59 AoE (UTC-12h) - Conference: 20 - 21 January 2020 ### Topics of Interest We welcome submissions in research areas related to formal certification of programs and proofs. The following is a non-exhaustive list of topics of interests to CPP: - certified or certifying programming, compilation, linking, OS kernels, runtime systems, and security monitors; - certified mathematical libraries and mathematical theorems; - proof assistants (e.g, ACL2, Agda, Coq, Dafny, F*, HOL, HOL-Light, Idris, Isabelle, Lean, Mizar, Nuprl, PVS, etc) - new languages and tools for certified programming; - program analysis, program verification, and program synthesis; - program logics, type systems, and semantics for certified code; - logics for certifying concurrent and distributed systems; - mechanized metatheory, formalized programming language semantics, and logical frameworks; - higher-order logics, dependent type theory, proof theory, logical systems, separation logics, and logics for security; - verification of correctness and security properties; - formally verified blockchains and smart contracts; - certificates for decision procedures, including linear algebra, polynomial systems, SAT, SMT, and unification in algebras of interest; - certificates for semi-decision procedures, including equality, first-order logic, and higher-order unification; - certificates for program termination; - formal models of computation; - mechanized (un)decidability and computational complexity proofs; - user interfaces for proof assistants and theorem provers - teaching mathematics and computer science with proof assistants. ### Program Committee Members - Jasmin Christian Blanchette (VU Amsterdam, Netherlands -- co-chair) - Catalin Hritcu (Inria Paris, France -- co-chair) - Nada Amin (Harvard University - USA) - Jes?s Mar?a Aransay Azofra (Universidad de La Rioja - Spain) - Mauricio Ayala-Rincon (Universidade de Brasilia - Brazil) - Liron Cohen (Cornell University - USA) - Dominique Devriese (Vrije Universiteit Brussel - Belgium) - Jean-Christophe Filli?tre (CNRS - France) - Adam Grabowski (University of Bialystok - Poland) - Warren Hunt (University of Texas - USA) - Ori Lahav (Tel Aviv University - Israel) - Peter Lammich (The University of Manchester - UK) - Dominique Larchey-Wendling (Univ. de Lorraine, CNRS, LORIA - France) - Hongjin Liang (Nanjing University - China) - Assia Mahboubi (Inria and VU Amsterdam - France) - Cesar Munoz (NASA - USA) - Vivek Nigam (fortiss GmbH - Germany) - Benjamin Pierce (University of Pennsylvania - USA) - Vincent Rahli (University of Luxembourg, SnT - Luxembourg) - Christine Rizkallah (UNSW Sydney - Australia) - Ilya Sergey (Yale-NUS College and National University of Singapore) - Kathrin Stark (Saarland University - Germany) - Nikhil Swamy (Microsoft Research - USA) - Nicolas Tabareau (Inria - France) - Dmitriy Traytel (ETH Z?rich - Switzerland) - Floris van Doorn (University of Pittsburgh - USA) - Akihisa Yamada (National Institute of Informatics - Japan) - Roberto Zunino (University of Trento - Italy) ### Submission Guidelines Submission guidelines will be made available in due course. ### Contact For any questions please contact the two PC chairs: Jasmin Christian Blanchette , Catalin Hritcu From matthewdaggitt at gmail.com Tue Mar 26 13:06:49 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Tue, 26 Mar 2019 20:06:49 +0800 Subject: [Agda] How to enforce dependencies between generalised variables Message-ID: Dear all, I'm trying out the new `variable` feature and am having some trouble enforcing dependencies between generalised variables. I'm trying to generalise the implicit variables in the following function type: ``` filter : ? {a} {A : Set a} {P : Pred A p} ? Decidable P ? List A ? List A ``` My attempt at doing so is as follows: ``` variable a p : Level A : Set a P : Pred A p filter : Decidable P ? List A ? List A filter P? [] = [] filter P? (x ? xs) with P? x ... | no _ = filter P? xs ... | yes _ = x ? filter P? xs ``` The problem is that slightly confusingly the `A` used implicitly in `P : Pred A p` is generalised separately from the `A` used in `List A` and so you get the following error ``` A !=< P.A of type (Set A.a) when checking that the expression x has type P.A ``` at `with P? x` in the definition. Removing `A : Set a` from the `variable` declaration obviously doesn't work as then the `A` in the variable declaration for `P` isn't defined. Is there a way of doing this? Many thanks, Matthew -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Tue Mar 26 13:27:32 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Tue, 26 Mar 2019 13:27:32 +0100 Subject: [Agda] How to enforce dependencies between generalised variables In-Reply-To: References: Message-ID: No, there is no way to enforce this dependency, so you have bind P manually. Generalisable variables would be quite awkward to use if they weren't generalised in type signatures for other variables. See this section of the user manual for more details: https://agda.readthedocs.io/en/latest/language/generalization-of-declared-variables.html#nested-generalization / Ulf On Tue, Mar 26, 2019 at 1:07 PM Matthew Daggitt wrote: > Dear all, > I'm trying out the new `variable` feature and am having some trouble > enforcing dependencies between generalised variables. I'm trying to > generalise the implicit variables in the following function type: > ``` > filter : ? {a} {A : Set a} {P : Pred A p} ? Decidable P ? List A ? List A > ``` > My attempt at doing so is as follows: > ``` > variable > a p : Level > A : Set a > P : Pred A p > > filter : Decidable P ? List A ? List A > filter P? [] = [] > filter P? (x ? xs) with P? x > ... | no _ = filter P? xs > ... | yes _ = x ? filter P? xs > ``` > The problem is that slightly confusingly the `A` used implicitly in `P : > Pred A p` is generalised separately from the `A` used in `List A` and so > you get the following error > ``` > A !=< P.A of type (Set A.a) when checking that the expression x has type > P.A > ``` > at `with P? x` in the definition. > > Removing `A : Set a` from the `variable` declaration obviously doesn't > work as then the `A` in the variable declaration for `P` isn't defined. > > Is there a way of doing this? > Many thanks, > Matthew > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.allais at ens-lyon.org Tue Mar 26 13:33:05 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 26 Mar 2019 12:33:05 +0000 Subject: [Agda] How to enforce dependencies between generalised variables In-Reply-To: References: Message-ID: <680926b5-0271-501b-92a9-48450f796eae@ens-lyon.org> Alternatively you can pass `A` explicitly to `Decidable` like we often do for `Decidable _?_`. This way you tell Agda that P's domain and A should be the same. This gives us: ``` open import Level open import Data.List.Base hiding (filter) open import Relation.Unary open import Relation.Nullary variable a p : Level A : Set a P : Pred A p filter : Decidable {A = A} P ? List A ? List A filter P? [] = [] filter P? (x ? xs) with P? x ... | no _ = filter P? xs ... | yes _ = x ? filter P? xs ``` Cheers, gallais On 26/03/2019 12:27, Ulf Norell wrote: > No, there is no way to enforce this dependency, so you have bind P > manually. Generalisable variables would be quite awkward to use if they > weren't generalised in type signatures for other variables. > > See this section of the user manual for more details: > > https://agda.readthedocs.io/en/latest/language/generalization-of-declared-variables.html#nested-generalization > > / Ulf > > On Tue, Mar 26, 2019 at 1:07 PM Matthew Daggitt > wrote: > >> Dear all, >> I'm trying out the new `variable` feature and am having some trouble >> enforcing dependencies between generalised variables. I'm trying to >> generalise the implicit variables in the following function type: >> ``` >> filter : ? {a} {A : Set a} {P : Pred A p} ? Decidable P ? List A ? List A >> ``` >> My attempt at doing so is as follows: >> ``` >> variable >> a p : Level >> A : Set a >> P : Pred A p >> >> filter : Decidable P ? List A ? List A >> filter P? [] = [] >> filter P? (x ? xs) with P? x >> ... | no _ = filter P? xs >> ... | yes _ = x ? filter P? xs >> ``` >> The problem is that slightly confusingly the `A` used implicitly in `P : >> Pred A p` is generalised separately from the `A` used in `List A` and so >> you get the following error >> ``` >> A !=< P.A of type (Set A.a) when checking that the expression x has type >> P.A >> ``` >> at `with P? x` in the definition. >> >> Removing `A : Set a` from the `variable` declaration obviously doesn't >> work as then the `A` in the variable declaration for `P` isn't defined. >> >> Is there a way of doing this? >> Many thanks, >> Matthew >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From matthewdaggitt at gmail.com Tue Mar 26 13:44:40 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Tue, 26 Mar 2019 20:44:40 +0800 Subject: [Agda] How to enforce dependencies between generalised variables In-Reply-To: <680926b5-0271-501b-92a9-48450f796eae@ens-lyon.org> References: <680926b5-0271-501b-92a9-48450f796eae@ens-lyon.org> Message-ID: Okay, well at least I know to stop looking! Cheers Gallais that's a neat work around (although it'll get a little cumbersome for deeper dependencies). Thanks both for the quick reply! On Tue, Mar 26, 2019 at 8:33 PM Guillaume Allais < guillaume.allais at ens-lyon.org> wrote: > Alternatively you can pass `A` explicitly to `Decidable` like we often > do for `Decidable _?_`. This way you tell Agda that P's domain and A > should be the same. This gives us: > > ``` > open import Level > open import Data.List.Base hiding (filter) > open import Relation.Unary > open import Relation.Nullary > > variable > a p : Level > A : Set a > P : Pred A p > > filter : Decidable {A = A} P ? List A ? List A > filter P? [] = [] > filter P? (x ? xs) with P? x > ... | no _ = filter P? xs > ... | yes _ = x ? filter P? xs > ``` > > Cheers, > gallais > > On 26/03/2019 12:27, Ulf Norell wrote: > > No, there is no way to enforce this dependency, so you have bind P > > manually. Generalisable variables would be quite awkward to use if they > > weren't generalised in type signatures for other variables. > > > > See this section of the user manual for more details: > > > > > https://agda.readthedocs.io/en/latest/language/generalization-of-declared-variables.html#nested-generalization > > > > / Ulf > > > > On Tue, Mar 26, 2019 at 1:07 PM Matthew Daggitt < > matthewdaggitt at gmail.com> > > wrote: > > > >> Dear all, > >> I'm trying out the new `variable` feature and am having some trouble > >> enforcing dependencies between generalised variables. I'm trying to > >> generalise the implicit variables in the following function type: > >> ``` > >> filter : ? {a} {A : Set a} {P : Pred A p} ? Decidable P ? List A ? List > A > >> ``` > >> My attempt at doing so is as follows: > >> ``` > >> variable > >> a p : Level > >> A : Set a > >> P : Pred A p > >> > >> filter : Decidable P ? List A ? List A > >> filter P? [] = [] > >> filter P? (x ? xs) with P? x > >> ... | no _ = filter P? xs > >> ... | yes _ = x ? filter P? xs > >> ``` > >> The problem is that slightly confusingly the `A` used implicitly in `P : > >> Pred A p` is generalised separately from the `A` used in `List A` and so > >> you get the following error > >> ``` > >> A !=< P.A of type (Set A.a) when checking that the expression x has type > >> P.A > >> ``` > >> at `with P? x` in the definition. > >> > >> Removing `A : Set a` from the `variable` declaration obviously doesn't > >> work as then the `A` in the variable declaration for `P` isn't defined. > >> > >> Is there a way of doing this? > >> Many thanks, > >> Matthew > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > >> > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Tue Mar 26 15:11:41 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Tue, 26 Mar 2019 14:11:41 +0000 Subject: [Agda] Identifying inefficiency Message-ID: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> I have a file with 339 lines only that takes 31s to type check. (Then on the same computer a development of 25k lines without comments takes 3m 20s to type check.) I can find the place where the inefficiency takes place by manual bisection. Is there a better way? M. From guillaume.brunerie at gmail.com Tue Mar 26 16:01:03 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Tue, 26 Mar 2019 16:01:03 +0100 Subject: [Agda] Identifying inefficiency In-Reply-To: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> Message-ID: You can turn on interactive highlighting (setting the variable "agda2-highlight-level" to "interactive"), and then when loading a file in emacs you can see where the highlighting gets "stuck". Another option is to run agda from the command line with the options " -v profile:7 ", and you will get a breakdown of which part of Agda took a long time (e.g. LHS checking, positivity, termination checking, and so on), which might help to identify different sources of inefficiency. Best, Guillaume Den tis 26 mars 2019 kl 15:11 skrev Martin Escardo : > > I have a file with 339 lines only that takes 31s to type check. > > (Then on the same computer a development of 25k lines without comments > takes 3m 20s to type check.) > > I can find the place where the inefficiency takes place by manual bisection. > > Is there a better way? > > M. > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From m.escardo at cs.bham.ac.uk Tue Mar 26 16:33:11 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Tue, 26 Mar 2019 15:33:11 +0000 Subject: [Agda] Identifying inefficiency In-Reply-To: References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> Message-ID: On 26/03/2019 15:01, guillaume.brunerie at gmail.com wrote: > You can turn on interactive highlighting (setting the variable > "agda2-highlight-level" to "interactive"), and then when loading a > file in emacs you can see where the highlighting gets "stuck". > > Another option is to run agda from the command line with the options " > -v profile:7 ", and you will get a breakdown of which part of Agda > took a long time (e.g. LHS checking, positivity, termination checking, > and so on), which might help to identify different sources of > inefficiency. Thanks. I already knew it is a single definition (or more precisely a pair of definitions in a where clause of that definition). Now I know that all the time is spent as Typing.CheckRHS 30,715ms With the RHS's replace by "?", typechecking is instant. (I tried supplying all the implicit arguments to the RHS's, but the 30s time remains the same. At the holes, the types of the subterms of the terms that I want to fill the holes with is known, so I am not sure what is going on. But I guess this is a different question from the one in this thread.) Martin > > Best, > Guillaume > > Den tis 26 mars 2019 kl 15:11 skrev Martin Escardo : >> >> I have a file with 339 lines only that takes 31s to type check. >> >> (Then on the same computer a development of 25k lines without comments >> takes 3m 20s to type check.) >> >> I can find the place where the inefficiency takes place by manual bisection. >> >> Is there a better way? >> >> M. >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From kahl at cas.mcmaster.ca Tue Mar 26 17:42:45 2019 From: kahl at cas.mcmaster.ca (Wolfram Kahl) Date: Tue, 26 Mar 2019 12:42:45 -0400 Subject: [Agda] Identifying inefficiency In-Reply-To: References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> Message-ID: <20190326164245.GP10807@ritchie.cas.mcmaster.ca> On Tue, Mar 26, 2019 at 03:33:11PM +0000, Martin Escardo wrote: > (I tried supplying all the implicit arguments to the RHS's, but the 30s > time remains the same. At the holes, the types of the subterms of the > terms that I want to fill the holes with is known, so I am not sure what > is going on. But I guess this is a different question from the one in > this thread.) Perhaps you are in the kind of situation that I frequently encounter, see https://github.com/agda/agda/issues/1625 . I haven't tried Andrea's patch at https://github.com/agda/agda/issues/1625#issuecomment-132196576 in a while, but it worked wonders for some developments that would otherwise have been impossible to typecheck. Wolfram From m.escardo at cs.bham.ac.uk Tue Mar 26 17:48:18 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Tue, 26 Mar 2019 16:48:18 +0000 Subject: [Agda] Identifying inefficiency In-Reply-To: <20190326164245.GP10807@ritchie.cas.mcmaster.ca> References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> <20190326164245.GP10807@ritchie.cas.mcmaster.ca> Message-ID: It seems that indeed I am. Instead of functors, like you, I am composing equivalences. And I have the composition of three equivalences, twice, with the two possible associations. For the moment, I have solved this by making "abstract" the function that composes two equivalences. This brings down the time from 31s to 3s for the module under discussion. But I will look at the link you gave, as it does seem to be the same kind of situation. Thanks! Martin On 26/03/2019 16:42, kahl at cas.mcmaster.ca wrote: > On Tue, Mar 26, 2019 at 03:33:11PM +0000, Martin Escardo wrote: >> (I tried supplying all the implicit arguments to the RHS's, but the 30s >> time remains the same. At the holes, the types of the subterms of the >> terms that I want to fill the holes with is known, so I am not sure what >> is going on. But I guess this is a different question from the one in >> this thread.) > > Perhaps you are in the kind of situation that I frequently encounter, > see https://github.com/agda/agda/issues/1625 . > > I haven't tried Andrea's patch at > > https://github.com/agda/agda/issues/1625#issuecomment-132196576 > > in a while, but it worked wonders for some developments that would > otherwise have been impossible to typecheck. > > > Wolfram > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From m.escardo at cs.bham.ac.uk Tue Mar 26 17:50:32 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Tue, 26 Mar 2019 16:50:32 +0000 Subject: [Agda] Identifying inefficiency In-Reply-To: References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> <20190326164245.GP10807@ritchie.cas.mcmaster.ca> Message-ID: <09be5ee3-ad66-8be5-abfb-2bcb2ce65f50@cs.bham.ac.uk> To be precise, I am not abstracting equivalence composition. I am abstracting the proof that the composition of equivalences is an equivalence. Martin On 26/03/2019 16:48, Martin Escardo wrote: > It seems that indeed I am. > > Instead of functors, like you, I am composing equivalences. And I have > the composition of three equivalences, twice, with the two possible > associations. > > For the moment, I have solved this by making "abstract" the function > that composes two equivalences. This brings down the time from 31s to 3s > for the module under discussion. > > But I will look at the link you gave, as it does seem to be the same > kind of situation. > > Thanks! > > Martin > > On 26/03/2019 16:42, kahl at cas.mcmaster.ca wrote: >> On Tue, Mar 26, 2019 at 03:33:11PM +0000, Martin Escardo wrote: >>> (I tried supplying all the implicit arguments to the RHS's, but the 30s >>> time remains the same.? At the holes, the types of the subterms of the >>> terms that I want to fill the holes with is known, so I am not sure what >>> is going on. But I guess this is a different question from the one in >>> this thread.) >> >> Perhaps you are in the kind of situation that I frequently encounter, >> see https://github.com/agda/agda/issues/1625 . >> >> I haven't tried Andrea's patch at >> >> ?? https://github.com/agda/agda/issues/1625#issuecomment-132196576 >> >> in a while, but it worked wonders for some developments that would >> otherwise have been impossible to typecheck. >> >> >> Wolfram >> > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From P.Achten at cs.ru.nl Wed Mar 27 09:43:58 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Wed, 27 Mar 2019 09:43:58 +0100 Subject: [Agda] [TFPIE'19] Call for papers: Trends in Functional Programming in Education 2019, 11 June 2019, Vancouver, BC, CA Message-ID: <19528b68-09a7-5e7f-6d22-ae46a7703367@cs.ru.nl> TFPIE 2019 Call for papers http://www.staff.science.uu.nl/~hage0101/tfpie2019/index.html (June 11th, University of British Columbia, Vancouver Canada, co-located with TFP 2019) TFPIE 2019 welcomes submissions describing techniques used in the classroom, tools used in and/or developed for the classroom and any creative use of functional programming (FP) to aid education in or outside Computer Science. Topics of interest include, but are not limited to: ? FP and beginning CS students ? FP and Computational Thinking ? FP and Artificial Intelligence ? FP in Robotics ? FP and Music ? Advanced FP for undergraduates ? FP in graduate education ? Engaging students in research using FP ? FP in Programming Languages ? FP in the high school curriculum ? FP as a stepping stone to other CS topics ? FP and Philosophy ? The pedagogy of teaching FP ? FP and e-learning: MOOCs, automated assessment etc. ? Best Lectures ? more details below In addition to papers, we are requesting best lecture presentations. What's your best lecture topic in an FP related course? Do you have a fun way to present FP concepts to novices or perhaps an especially interesting presentation of a difficult topic? In either case, please consider sharing it. Best lecture topics will be selected for presentation based on a short abstract describing the lecture and its interest to TFPIE attendees. The length of the presentation should be comparable to that of a paper. On top of the lecture itself, the presentation can also provide commentary on the lecture. Submissions Potential presenters are invited to submit an extended abstract (4-6 pages) or a draft paper (up to 16 pages) in EPTCS style. The authors of accepted presentations will have their preprints and their slides made available on the workshop's website. Papers and abstracts can be submitted via easychair at the following link: https://easychair.org/conferences/?conf=tfpie2019 After the workshop, presenters will be invited to submit (a revised version of) their article for review. The PC will select the best articles that will be published in the Electronic Proceedings in Theoretical Computer Science (EPTCS). Articles rejected for presentation and extended abstracts will not be formally reviewed by the PC. Dates Submission deadline:????????? May? 14th 2019, Anywhere on Earth. Notification:???????????????? May? 20th Workshop:???????????????????? June 11th Submission for formal review: August 18th 2019, Anywhere on Earth Notification of full article: October 6th Camera ready:???????????????? November 1st Program Committee Alex Gerdes?????????? - University of Gothenburg / Chalmers Jurriaan Hage (Chair) - Utrecht University Pieter Koopman??????? - Radboud University, the Netherlands Elena Machkasova????? - University of Minnesota, Morris, USA Heather Miller??????? - Carnegie Mellon University and EPFL Lausanne Prabhakar Ragde?????? - University of Waterloo, Waterloo, Ontario, Canada Simon Thompson??????? - University of Kent, UK Sharon Tuttle???????? - Humboldt State University, Arcata, USA Note: information on TFP is available at https://www.tfp2019.org/index.html From nad at cse.gu.se Wed Mar 27 10:49:30 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 27 Mar 2019 10:49:30 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 1 In-Reply-To: <1553445598.2356.7.camel@one.mechvel.pereslavl.ru> References: <1553288109.2295.35.camel@one.mechvel.pereslavl.ru> <0e7106ff-c961-ccc2-bb80-582213d8b068@cse.gu.se> <1553445598.2356.7.camel@one.mechvel.pereslavl.ru> Message-ID: <9544871e-3638-a55d-3de9-dca0c4e750c7@cse.gu.se> On 24/03/2019 17.39, Sergei Meshveliani wrote: > I always do so. > In this my example, M2.agda > * defines `main' function, > * is not imported by any module, > * and I hesitate whether to set the `module' header in M2.agda. > > (the effects are described below). I suggest that you include the module header in M2.agda as well. -- /NAD From mechvel at botik.ru Wed Mar 27 18:38:20 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 27 Mar 2019 20:38:20 +0300 Subject: [Agda] fastCompare for Nat Message-ID: <1553708300.2395.20.camel@one.mechvel.pereslavl.ru> Dear standard library developers, The comparison Nat.<-cmp is `exponentially' slow. As lib-0.18-candidate has fast _??_ and _ n) -- -- _?_ and _?_ are via built-in. compareFast m n = aux (m ? n) (m ? n) (n ? m) refl refl where aux : Dec (m ? n) ? (d d' : ?) ? m ? n ? d ? n ? m ? d' ? Tri (m < n) (m ? n) (m > n) aux (yes m?n) _ _ _ _ = tri? (<-irrefl m?n) m?n m?n where m?n = <-irrefl (sym m?n) aux (no m?n) 0 _ m?n?0 _ = tri< m (<-asym n /****************************************************************************/ ACM Conference on Systems, Programming, Languages, and Applications: Software for Humanity (SPLASH'19) Athens, Greece Sun 20 - Fri 25 October 2019 https://2019.splashcon.org/ Sponsored by ACM SIGPLAN /****************************************************************************/ SPLASH is the ACM SIGPLAN conference on Systems, Programming, Languages, and Applications: Software for Humanity. SPLASH embraces all aspects of software construction and delivery, to make it the premier conference on the applications of programming languages--at the intersection of programming languages and software engineering. We invite high quality submissions describing original and unpublished work. Combined Call for Papers: * PACMPL Issue OOPSLA 2019--final call * Onward! Papers--final call * Onward! Essays--final call * SPLASH-I * Dynamic Languages Symposium (DLS) * Generative Programming: Concepts & Experiences (GPCE) * Software Language Engineering (SLE) * Managed Programming Languages and Runtimes (MPLR) * SPLASH-E * Doctoral Symposium * Student Research Competition * Workshops * Posters * Student Volunteers ## PACMPL Issue OOPSLA 2019 PACMPL Issue OOPSLA 2019 seeks contributions on all aspects of programming languages and software engineering. Authors of papers published in PACMPL Issue OOPSLA 2019 will present their work at OOPSLA in Athens. Papers may target any stage of software development, including requirements, modeling, prototyping, design, implementation, generation, analysis, verification, testing, evaluation, maintenance, and reuse of software systems. Contributions may include the development of new tools (such as language front-ends, program analyses, and runtime systems), new techniques (such as methodologies, design processes, and code organization approaches), new principles (such as formalisms, proofs, models, and paradigms), and new evaluations (such as experiments, corpora analyses, user studies, and surveys). Submissions due: Fri 5 Apr, 2019 https://2019.splashcon.org/track/splash-2019-oopsla ## Onward! Papers Onward! is a premier multidisciplinary conference focused on everything to do with programming and software: including processes, methods, languages, communities, and applications. Onward! is more radical, more visionary, and more open than other conferences to ideas that are well-argued but not yet proven. We welcome different ways of thinking about, approaching, and reporting on programming language and software engineering research. Submissions due: Mon 22 April, 2019 https://2019.onward-conference.org/track/onward-2019-papers (transitioning to https://2019.splashcon.org/track/splash-2019-Onward-papers) ## Onward! Essays Onward! Essays is looking for clear and compelling pieces of writing about topics important to the software community. An essay can be long or short. An essay can be an exploration of the topic and its impact, or a story about the circumstances of its creation; it can present a personal view of what is, explore a terrain, or lead the reader in an act of discovery; it can be a philosophical digression or a deep analysis. It can describe a personal journey, perhaps the one the author took to reach an understanding of the topic. The subject area?software, programming, and programming languages?should be interpreted broadly and can include the relationship of software to human endeavors, or its philosophical, sociological, psychological, historical, or anthropological underpinnings. Submissions due: Mon 22 April, 2019 https://2019.onward-conference.org/track/onward-2019-Onward-Essays (transitioning to https://2019.splashcon.org/track/splash-2019-Onward-Essays) ## SPLASH-I SPLASH-I is a series of high-quality talks that highlight the challenges that are on the forefront of both research and practice across the SPLASH community's broad spectrum of domains and techniques. We invite the community to propose speakers (including themselves) through our call for contributions. Submissions due: Fri May 17, 2019 https://2019.splashcon.org/track/splash-2019-SPLASH-I ## Dynamic Languages Symposium (DLS) Dynamic Languages, from Lisp, Snobol, and Smalltalk to Python, Racket, and Javascript, have been playing a fundamental role both in programming research and practice. DLS is the premier forum for researchers and practitioners to share research and experience on all aspects of Dynamic Languages. DLS invites high quality papers reporting original research and experience related to the design, implementation, and applications of dynamic languages. Abstracts due: Wed 29 May, 2019 Submissions due: Wed 5 Jun, 2019 https://conf.researchr.org/home/dls-2019 ## Generative Programming: Concepts & Experiences (GPCE) The International Conference on Generative Programming: Concepts & Experience (GPCE) is a venue for researchers and practitioners interested in techniques and tools for code generation, language implementation, and metaprogramming. GPCE seeks conceptual, theoretical, empirical, and technical contributions to its topics of interest, which include but are not limited to (i) program transformation, staging, macro systems, preprocessors, program synthesis, and code-recommendation systems, (ii) domain-specific languages, language embedding, language design, and language workbenches, (iii) feature-oriented programming, domain engineering, and feature interactions, (iv) applications and properties of code generation, language implementation, and product-line development. Abstracts due: Fri 14 Jun, 2019 Submissions due: Fri 21 Jun, 2019 https://conf.researchr.org/home/gpce-2019 ## Software Language Engineering (SLE) Software Language Engineering (SLE) is the discipline of engineering languages and their tools required for the creation of software. It abstracts from the differences between programming languages, modelling languages, and other software languages, and emphasizes the engineering facet of the creation of such languages, that is, the establishment of the scientific methods and practices that enable the best results. SLE 2019 solicits high quality contributions in areas ranging from theoretical and conceptual contributions, to tools, techniques, and frameworks in the domain of software language engineering. Abstracts due: Fri 14 Jun, 2019 Submissions due: Fri 21 Jun, 2019 https://conf.researchr.org/home/sle-2019 ## Managed Programming Languages and Runtimes (MPLR) The International Conference on Managed Programming Languages & Runtimes (MPLR, formerly ManLang) is a premier forum for presenting and discussing novel results in all aspects of managed programming languages and runtime systems, which serve as building blocks for some of the most important computing systems around, ranging from small-scale (embedded and real-time systems) to large-scale (cloud-computing and big-data platforms) and anything in between (mobile, IoT, and wearable applications). Submissions due: Mon July 8, 2019 https://conf.researchr.org/home/mplr-2019 ## SPLASH-E SPLASH-E is a track focused on education-related challenges, innovations, and best practices in all areas covered by the SPLASH conference. We welcome a broad range of submissions including those that report on experiences, research results, innovative teaching approaches, and pedagogical reflection. Submissions due: Fri July 12, 2019 https://2019.splashcon.org/track/splash-2019-SPLASH-E ## Doctoral Symposium The SPLASH Doctoral Symposium provides students with useful guidance for completing their dissertation research and beginning their research careers. The symposium will provide an interactive forum for doctoral students who have progressed far enough in their research to have a structured proposal, but will not be defending their dissertation in the next 12 months. This year, the John Vlissides Award will be presented to a symposium participant showing significant promise in applied software research. All participants to the Doctoral Symposium are eligible. The award includes a prize of $2,000. Submissions due: Fri 12 Jul, 2019 http://2019.splashcon.org/track/splash-2019-Doctoral-Symposium ## Student Research Competition The ACM Student Research Competition (SRC), sponsored by Microsoft Research, offers a unique forum for ACM student members at the undergraduate and graduate levels to present their original research at SPLASH before a panel of judges and conference attendees. The SRC gives visibility to not only up-and-coming young researchers, but also exposes them to the field of computer science research and its community. This competition also gives students an opportunity to discuss their research with experts in their field, get feedback, and to help them sharpen their communication and networking skills. Student Research Competition abstract due: Fri July 12, 2019 https://2019.splashcon.org/track/splash-2019-SRC ## Workshops Following its long-standing tradition, SPLASH 2019 will host a variety of high-quality workshops, allowing their participants to meet and discuss research questions with peers, to mature new and exciting ideas, and to build up communities and start new collaborations. SPLASH workshops complement the main tracks of the conference and provide meetings in a smaller and more specialized setting. Workshops cultivate new ideas and concepts for the future, optionally recorded in formal proceedings. The paper submission deadline for all workshops is Aug 2, 2019 AoE. The following workshops are co-located with SPLASH 2019. (Some pages not yet public.) * AGERE (Actors, Agents, and Decentralized Control) https://2019.splashcon.org/home/agere-2019 * AI-SEPS (AI-Inspired and Empirical Methods for Software Engineering on Parallel Computing Systems) https://2019.splashcon.org/home/seps-2019 * DSM (Domain-Specific Modeling) https://2019.splashcon.org/home/dsm-2019 * IC (Incremental Computations) https://2019.splashcon.org/home/ic-2019 * LIVE (Live Programming) https://2019.splashcon.org/home/live-2019 * META (Metaprogramming) https://2019.splashcon.org/home/meta-2019 * NJR (Normalized Java Resource) https://2019.splashcon.org/home/njr-2019 * REBLS (Reactive and Event-based Languages & Systems) https://2019.splashcon.org/home/rebls-2019 * STOKED https://2019.splashcon.org/home/stoked-2019 * VMIL (Virtual Machines and Intermediate Languages) https://2019.splashcon.org/home/vmil-2019 ## Posters The SPLASH Poster track provides an excellent forum for authors to present their recent or ongoing projects in an interactive setting, and receive feedback from the community. We invite submissions covering any aspect of programming, systems, languages and applications. The goal of the poster session is to encourage and facilitate small groups of individuals interested in a technical area to gather and interact at any desired level of detail. The poster session is held early in the conference to promote continued discussion among interested parties. Submissions due: Sat 7 Sep, 2019 https://2019.splashcon.org/track/splash-2019-Posters ## Student Volunteers The SPLASH Student Volunteers program provides an opportunity for students from around the world to associate with some of the leading personalities in industry and research in the following areas: programming languages, object-oriented technology and software development. Student volunteers contribute to the smooth running of the conference by performing tasks such as: assisting with registration, providing information about the conference to attendees, assisting session organizers and monitoring sessions. Detailed information on how to apply will be available on the main conference page in March 2019. Estimated deadline for the SV applications will be towards the end of September 2019. https://2019.splashcon.org/track/splash-2019-Student-Volunteers ## Information Contact: publicity at splashcon.org Website: https://2019.splashcon.org/ Location: Royal Olympic Hotel, Athens, Greece ## Organization SPLASH General Chair: * Yannis Smaragdakis (University of Athens) OOPSLA Review Committee Chair: * Eelco Visser (Delft University of Technology) Onward! Papers Chair: * Hidehiko Masuhara (Tokyo Institute of Technology) Onward! Essays Chair: * Tomas Petricek (Alan Turing Institute) DLS Program Chair: * Stefan Marr (University of Kent) GPCE General Chair: * Ina Schaefer (Technische Universit?t Braunschweig) GPCE Program Chair: * Tijs van der Storm (Centrum Wiskunde & Informatica / University of Groningen) SLE General Chair: * Oscar Nierstrasz (University of Bern) SLE Program Co-Chairs: * Bruno Oliveira (University of Hong Kong) * Jeff Gray (University of Alabama) SLE Publicity Chair: * Andrei Chi? (Feenk GmbH, Switzerland) SLE AEC Co-Chairs: * Emma S?derberg (Lund University) * Abel Gomez (Universitat Oberta de Catalunya) MPLR General Chair: * Tony Hosking (Australian National University / Data61) MPLR Program Chair: * Irene Finocchi (Sapienza University of Rome) SPLASH-I Co-Chairs: * Shan Shan Huang (Facebook) * Michael Carbin (MIT) SPLASH-E Chair: * Elisa Baniassad (University of British Columbia) Workshops Co-Chairs: * Arjun Guha (University of Massachusetts Amherst) * Neville Grech (University of Athens, University of Malta) OOPSLA Artifact Evaluation Co-Chairs: * Colin S. Gordon (Drexel University) * Jan Vitek (Northeastern University) Posters Chair: * Christoph Reichenbach (Lund University) Doctoral Symposium Chair: * ?ric Tanter (University of Chile & Inria Paris) Student Research Competition Co-Chairs: * Jay McCarthy (University of Massachusetts Lowell) * David Darais (University of Vermont) Student Volunteers Co-Chairs: * Juliana Franco (Microsoft Research, Cambridge) * Tony Antoniadis (University of Athens) Publications Chair: * Magnus Madsen (Aarhus University) Publicity Co-Chairs: * Aggelos Biboudis (?cole Polytechnique F?d?rale de Lausanne) * Tijs van der Storm (CWI / University of Groningen) Local Arrangements Chair: * George Fourtounis (University of Athens) Accessibility Chair: * Kostas Saidis (University of Athens) Sponsorships Co-Chairs: * Caitlin Sadowski (Google) * Jaeheon Yi (Google) Video Co-Chairs: * Benjamin Chung (Northeastern University) * Sifis Lagouvardos (University of Athens) Web Co-Chairs: * Aggelos Biboudis (?cole Polytechnique F?d?rale de Lausanne) * Aviral Goel (Northeastern University) /****************************************************************************/ From mechvel at botik.ru Wed Mar 27 19:56:47 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Wed, 27 Mar 2019 21:56:47 +0300 Subject: [Agda] fast gcd for Nat Message-ID: <1553713007.2674.10.camel@one.mechvel.pereslavl.ru> Dear all, I have implemented the following fast functions for Nat: `compare', toDecimalSystem, show, gcd. They are certified (`TERMINATING' removed from `show'). There are used built-ins % (`modulo'), _div_ of Nat.DivMod. If similar things will not appear in lib-0.18, then, may be I would come up the proposal. Regards, ------ Sergei From guillaume.allais at ens-lyon.org Wed Mar 27 20:03:28 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Wed, 27 Mar 2019 19:03:28 +0000 Subject: [Agda] fast gcd for Nat In-Reply-To: <1553713007.2674.10.camel@one.mechvel.pereslavl.ru> References: <1553713007.2674.10.camel@one.mechvel.pereslavl.ru> Message-ID: <3f341118-4450-0472-c541-42883928554e@ens-lyon.org> Dear Sergei, 0.18 (or 1.0 as it is now known) is going to be released imminently together with Agda 2.6.0. I doubt very much that anything extra will get in before the deadline. I am very happy to hear that you now have safe versions of the fast functions. This is much more likely to get in as it won't break anything. Best, -- gallais On 27/03/2019 18:56, Sergei Meshveliani wrote: > Dear all, > > I have implemented the following fast functions for Nat: > `compare', toDecimalSystem, show, gcd. > > They are certified (`TERMINATING' removed from `show'). > There are used built-ins % (`modulo'), _div_ of Nat.DivMod. > > If similar things will not appear in lib-0.18, then, may be I would come > up the proposal. > > Regards, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From icfp.publicity at googlemail.com Thu Mar 28 03:44:47 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Wed, 27 Mar 2019 22:44:47 -0400 Subject: [Agda] Call for Tutorial Proposals: ICFP 2019 Message-ID: <5c9c351f38f8f_79832ab973eda5c4986e6@homer.mail> CALL FOR TUTORIAL PROPOSALS ICFP 2019 24th ACM SIGPLAN International Conference on Functional Programming August 18 - 23, 2019 Berlin, Germany https://icfp19.sigplan.org/ The 24th ACM SIGPLAN International Conference on Functional Programming will be held in Berlin, Germany on August 18-23, 2019. ICFP provides a forum for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. Proposals are invited for tutorials, lasting approximately 3 hours each, to be presented during ICFP and its co-located workshops and other events. These tutorials are the successor to the CUFP tutorials from previous years, but we also welcome tutorials whose primary audience is researchers rather than practitioners. Tutorials may focus either on a concrete technology or on a theoretical or mathematical tool. Ideally, tutorials will have a concrete result, such as "Learn to do X with Y" rather than "Learn language Y". Tutorials may occur after ICFP co-located with the associated workshops, from August 22 till August 23. ---------------------------------------------------------------------- Submission details Deadline for submission: May 10th, 2019 Notification of acceptance: May 17th, 2019 Prospective organizers of tutorials are invited to submit a completed tutorial proposal form in plain text format to the ICFP 2018 workshop co-chairs (Jennifer Hackett and Christophe Scholliers), via email to icfp-workshops-2019 at googlegroups.com by May 10th, 2019. Please note that this is a firm deadline. Organizers will be notified if their event proposal is accepted by May 17, 2019. The proposal form is available at: http://www.icfpconference.org/icfp2019-files/icfp19-tutorials-form.txt ---------------------------------------------------------------------- Selection committee The proposals will be evaluated by a committee comprising the following members of the ICFP 2019 organizing committee. Tutorials Co-Chair: Jennifer Hackett (University of Nottingham) Tutorials Co-Chair: Christophe Scholliers (University of Ghent) General Chair: Derek Dreyer (MPI-SWS) Program Chair: Fran?ois Pottier ( Inria, France) ---------------------------------------------------------------------- Further information Any queries should be addressed to the tutorial co-chairs ( Jennifer Hackett and Christophe Scholliers), via email to icfp-workshops-2019 at googlegroups.com From matthewdaggitt at gmail.com Thu Mar 28 06:53:43 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 28 Mar 2019 13:53:43 +0800 Subject: [Agda] Fwd: fastCompare for Nat In-Reply-To: References: <1553708300.2395.20.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, No the standard library doesn't currently have a fast compare. Feel free to open a PR to adjust the implementation. Matthew On Thu, Mar 28, 2019 at 1:38 AM Sergei Meshveliani wrote: > Dear standard library developers, > > The comparison Nat.<-cmp is `exponentially' slow. > > As lib-0.18-candidate has fast _??_ and _ and as _?_ is also fast on Nat (when the proof is not inspected), > this gives a hope for making <-cmp fast in a similar sense. > > The below compareFast implements the goal by using that _?_ is > expressed via built-in. > > I wonder of whether standard library supports a simpler solution. > If it does not, then maybe it could incorporate a similar thing. > > Thanks, > > ------ > Sergei > > > -------------------------------------------------------------- > compareFast : (m n : ?) ? Tri (m < n) (m ? n) (m > n) > -- > -- _?_ and _?_ are via built-in. > > compareFast m n = aux (m ? n) (m ? n) (n ? m) refl refl > where > aux : Dec (m ? n) ? (d d' : ?) ? m ? n ? d ? n ? m ? d' ? > Tri (m < n) (m ? n) (m > n) > > aux (yes m?n) _ _ _ _ = tri? (<-irrefl m?n) m?n m?n > where > m?n = <-irrefl (sym m?n) > > aux (no m?n) 0 _ m?n?0 _ = tri< m where > m?n = m?n?0?m?n m?n?0 > m > aux (no m?n) (suc _) 0 _ n?m?0 = > tri> (<-asym n where > n?m = m?n?0?m?n n?m?0 > n?m = m?n ? sym > n > aux _ (suc d?) (suc d?) m?n?1+d? n?m?1+d? = > contradiction n where > m?n?0 = \m-n?0 ? let 1+d??0 = trans (sym m?n?1+d?) m-n?0 > in suc?0 1+d??0 > > n?m?0 = \n-m?0 ? let 1+d??0 = trans (sym n?m?1+d?) n-m?0 > in suc?0 1+d??0 > > n m > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Thu Mar 28 06:54:27 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 28 Mar 2019 13:54:27 +0800 Subject: [Agda] fast gcd for Nat In-Reply-To: <3f341118-4450-0472-c541-42883928554e@ens-lyon.org> References: <1553713007.2674.10.camel@one.mechvel.pereslavl.ru> <3f341118-4450-0472-c541-42883928554e@ens-lyon.org> Message-ID: Yes, feel free to open a PR with your suggestions. On Thu, Mar 28, 2019 at 3:03 AM Guillaume Allais < guillaume.allais at ens-lyon.org> wrote: > Dear Sergei, > > 0.18 (or 1.0 as it is now known) is going to be released imminently > together with Agda 2.6.0. I doubt very much that anything extra will > get in before the deadline. > > I am very happy to hear that you now have safe versions of the fast > functions. This is much more likely to get in as it won't break > anything. > > Best, > -- > gallais > > On 27/03/2019 18:56, Sergei Meshveliani wrote: > > Dear all, > > > > I have implemented the following fast functions for Nat: > > `compare', toDecimalSystem, show, gcd. > > > > They are certified (`TERMINATING' removed from `show'). > > There are used built-ins % (`modulo'), _div_ of Nat.DivMod. > > > > If similar things will not appear in lib-0.18, then, may be I would come > > up the proposal. > > > > Regards, > > > > ------ > > Sergei > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Thu Mar 28 06:55:01 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 28 Mar 2019 13:55:01 +0800 Subject: [Agda] fast gcd for Nat In-Reply-To: References: <1553713007.2674.10.camel@one.mechvel.pereslavl.ru> <3f341118-4450-0472-c541-42883928554e@ens-lyon.org> Message-ID: Sorry I forgot to add, that it would probably be best if you added them one at a time. On Thu, Mar 28, 2019 at 1:54 PM Matthew Daggitt wrote: > Yes, feel free to open a PR with your suggestions. > > On Thu, Mar 28, 2019 at 3:03 AM Guillaume Allais < > guillaume.allais at ens-lyon.org> wrote: > >> Dear Sergei, >> >> 0.18 (or 1.0 as it is now known) is going to be released imminently >> together with Agda 2.6.0. I doubt very much that anything extra will >> get in before the deadline. >> >> I am very happy to hear that you now have safe versions of the fast >> functions. This is much more likely to get in as it won't break >> anything. >> >> Best, >> -- >> gallais >> >> On 27/03/2019 18:56, Sergei Meshveliani wrote: >> > Dear all, >> > >> > I have implemented the following fast functions for Nat: >> > `compare', toDecimalSystem, show, gcd. >> > >> > They are certified (`TERMINATING' removed from `show'). >> > There are used built-ins % (`modulo'), _div_ of Nat.DivMod. >> > >> > If similar things will not appear in lib-0.18, then, may be I would come >> > up the proposal. >> > >> > Regards, >> > >> > ------ >> > Sergei >> > >> > _______________________________________________ >> > Agda mailing list >> > Agda at lists.chalmers.se >> > https://lists.chalmers.se/mailman/listinfo/agda >> > >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Mar 28 13:36:15 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 28 Mar 2019 15:36:15 +0300 Subject: [Agda] foldr _+_ vs foldl Message-ID: <1553776575.6558.22.camel@scico.botik.ru> People, I run sum : List Fraction ? Fraction sum = foldl _+fr_ 0fr to sum a list [1/m | (m : Integer) <- [1 .. 30]] of fractions, where _+fr_ is my home-made generic fraction addition. This example is expensive to run because the intermediate denominators grow somewhat like m!. But what is remarkable: changing foldl to foldr makes it slower 15 times. What is the source of this slowing down? I expect that only about 30 calls of _+fr_ or foldr(l) are put to stack in the worst case, and the stack occurs large because some of these calls contain large data inside. Then, it remains to find out how laziness relates to foldl and foldr in Agda, what MAlonzo makes of it, and how it is treated in GHC. (GHC has a certain strictness analysis ... and I recall that in GHC foldr was more lucky on average than foldl). What people would tell about this? Thanks, ------ Sergei From ulf.norell at gmail.com Thu Mar 28 14:21:06 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Thu, 28 Mar 2019 14:21:06 +0100 Subject: [Agda] foldr _+_ vs foldl In-Reply-To: <1553776575.6558.22.camel@scico.botik.ru> References: <1553776575.6558.22.camel@scico.botik.ru> Message-ID: I wouldn't be so quick to blame laziness and strictness analysis in this case. Folding from the left or from the right creates very different intermediate terms. In ghci: ? scanl (+) 0 [ 1 / fromIntegral n | n <- [1..30] ] :: [Rational] [0 % 1,1 % 1,3 % 2,11 % 6,25 % 12,137 % 60,49 % 20,363 % 140,761 % 280,7129 % 2520,7381 % 2520,83711 % 27720,86021 % 27720,1145993 % 360360,1171733 % 360360,1195757 % 360360,2436559 % 720720,42142223 % 12252240,14274301 % 4084080,275295799 % 77597520,55835135 % 15519504,18858053 % 5173168,19093197 % 5173168,444316699 % 118982864,1347822955 % 356948592,34052522467 % 8923714800,34395742267 % 8923714800,312536252003 % 80313433200,315404588903 % 80313433200,9227046511387 % 2329089562800,9304682830147 % 2329089562800] ? scanr (+) 0 [ 1 / fromIntegral n | n <- [1..30] ] :: [Rational] [9304682830147 % 2329089562800,6975593267347 % 2329089562800,5811048485947 % 2329089562800,5034685298347 % 2329089562800,4452412907647 % 2329089562800,3986594995087 % 2329089562800,3598413401287 % 2329089562800,3265686320887 % 2329089562800,2974550125537 % 2329089562800,2715762396337 % 2329089562800,2482853440057 % 2329089562800,2271118025257 % 2329089562800,2077027228357 % 2329089562800,1897866492757 % 2329089562800,247357564651 % 332727080400,225175759291 % 332727080400,102190158383 % 166363540200,5435533399 % 9786090600,4891861699 % 9786090600,230358121 % 515057400,204605251 % 515057400,1260550957 % 3605401800,99697187 % 327763800,3715069 % 14250600,1560647 % 7125300,255127 % 1425060,15409 % 109620,1261 % 12180,59 % 870,1 % 30,0 % 1] / Ulf On Thu, Mar 28, 2019 at 2:14 PM Sergei Meshveliani wrote: > People, > > I run > sum : List Fraction ? Fraction > sum = foldl _+fr_ 0fr > > to sum a list [1/m | (m : Integer) <- [1 .. 30]] > > of fractions, where _+fr_ is my home-made generic fraction addition. > This example is expensive to run because the intermediate denominators > grow somewhat like m!. > > But what is remarkable: changing foldl to foldr makes it slower 15 > times. > What is the source of this slowing down? > > I expect that only about 30 calls of _+fr_ or foldr(l) are put to stack > in the worst case, and the stack occurs large because some of these > calls contain large data inside. > Then, it remains to find out how laziness relates to foldl and foldr in > Agda, what MAlonzo makes of it, and how it is treated in GHC. > (GHC has a certain strictness analysis ... > and I recall that in GHC foldr was more lucky on average than foldl). > > What people would tell about this? > > Thanks, > > ------ > Sergei > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.brunerie at gmail.com Thu Mar 28 14:22:08 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Thu, 28 Mar 2019 14:22:08 +0100 Subject: [Agda] foldr _+_ vs foldl In-Reply-To: <1553776575.6558.22.camel@scico.botik.ru> References: <1553776575.6558.22.camel@scico.botik.ru> Message-ID: Hi Sergei, With foldl, you make Agda compute (?(1 + 1/2) + ?) + 1/29) + 1/30) (associated to the left), whereas with foldr you make Agda compute (1 + (1/2 + ? + (1/29 + 1/30)?) (associated to the right). I think it makes sense that the second one is slower because the denominators of the intermediate results grow much faster since the beginning, compared to the first one : 1/28 + (1/29 + 1/30) has a bigger denominator than ((1 + 1/2) + 1/3). Even though in the end you get the same result, the intermediate calculations are more complicated in the case of foldr than in the case of foldl. Best, Guillaume Den tors 28 mars 2019 kl 14:14 skrev Sergei Meshveliani : > > People, > > I run > sum : List Fraction ? Fraction > sum = foldl _+fr_ 0fr > > to sum a list [1/m | (m : Integer) <- [1 .. 30]] > > of fractions, where _+fr_ is my home-made generic fraction addition. > This example is expensive to run because the intermediate denominators > grow somewhat like m!. > > But what is remarkable: changing foldl to foldr makes it slower 15 > times. > What is the source of this slowing down? > > I expect that only about 30 calls of _+fr_ or foldr(l) are put to stack > in the worst case, and the stack occurs large because some of these > calls contain large data inside. > Then, it remains to find out how laziness relates to foldl and foldr in > Agda, what MAlonzo makes of it, and how it is treated in GHC. > (GHC has a certain strictness analysis ... > and I recall that in GHC foldr was more lucky on average than foldl). > > What people would tell about this? > > Thanks, > > ------ > Sergei > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From apostolis.xekoukoulotakis at gmail.com Thu Mar 28 20:07:32 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Thu, 28 Mar 2019 21:07:32 +0200 Subject: [Agda] foldr _+_ vs foldl In-Reply-To: References: <1553776575.6558.22.camel@scico.botik.ru> Message-ID: Just letting you know, that xekoukou/agda-ocaml is 3 times faster than haskell (and on ocassions much faster) It simply requires some love from the community. ( I have no time to work on it, for the moment.) It is also strict, so you could check if the problem is strict evaluation or not. On Thu, Mar 28, 2019 at 3:22 PM Guillaume Brunerie < guillaume.brunerie at gmail.com> wrote: > Hi Sergei, > > With foldl, you make Agda compute (?(1 + 1/2) + ?) + 1/29) + 1/30) > (associated to the left), whereas with foldr you make Agda compute (1 > + (1/2 + ? + (1/29 + 1/30)?) (associated to the right). > I think it makes sense that the second one is slower because the > denominators of the intermediate results grow much faster since the > beginning, compared to the first one : 1/28 + (1/29 + 1/30) has a > bigger denominator than ((1 + 1/2) + 1/3). > Even though in the end you get the same result, the intermediate > calculations are more complicated in the case of foldr than in the > case of foldl. > > Best, > Guillaume > > Den tors 28 mars 2019 kl 14:14 skrev Sergei Meshveliani >: > > > > People, > > > > I run > > sum : List Fraction ? Fraction > > sum = foldl _+fr_ 0fr > > > > to sum a list [1/m | (m : Integer) <- [1 .. 30]] > > > > of fractions, where _+fr_ is my home-made generic fraction addition. > > This example is expensive to run because the intermediate denominators > > grow somewhat like m!. > > > > But what is remarkable: changing foldl to foldr makes it slower 15 > > times. > > What is the source of this slowing down? > > > > I expect that only about 30 calls of _+fr_ or foldr(l) are put to stack > > in the worst case, and the stack occurs large because some of these > > calls contain large data inside. > > Then, it remains to find out how laziness relates to foldl and foldr in > > Agda, what MAlonzo makes of it, and how it is treated in GHC. > > (GHC has a certain strictness analysis ... > > and I recall that in GHC foldr was more lucky on average than foldl). > > > > What people would tell about this? > > > > Thanks, > > > > ------ > > Sergei > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From chisvasileandrei at gmail.com Fri Mar 29 10:10:07 2019 From: chisvasileandrei at gmail.com (Andrei Chis) Date: Fri, 29 Mar 2019 10:10:07 +0100 Subject: [Agda] First Call for Papers: 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019) Message-ID: ------------------------------------------------------------------------ Call for Papers: 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019) co-located with SPLASH 2019 Athens, Greece October 21-22, 2019 https://conf.researchr.org/home/sle-2019 http://www.sleconf.org/2019 Follow us on twitter: https://twitter.com/sleconf ------------------------------------------------------------------------ We are pleased to invite you to submit papers to the 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019), held in conjunction with SPLASH 2019 at Athens, Greece on October 21-22, 2019. --------------------------- Topics of Interest --------------------------- SLE 2019 solicits high-quality contributions in areas ranging from theoretical and conceptual contributions, to tools, techniques, and frameworks in the domain of software language engineering. Topics relevant to SLE cover generic aspects of software languages development rather than aspects of engineering a specific language. In particular, SLE is interested in contributions from the following areas: * Software Language Design and Implementation - Approaches to and methods for language design - Static semantics (e.g., design rules, well-formedness constraints) - Techniques for specifying behavioral / executable semantics - Generative approaches (incl. code synthesis, compilation) - Meta-languages, meta-tools, language workbenches * Software Language Validation - Verification and formal methods for languages - Testing techniques for languages - Simulation techniques for languages * Software Language Integration and Composition - Coordination of heterogeneous languages and tools - Mappings between languages (incl. transformation languages) - Traceability between languages - Deployment of languages to different platforms * Software Language Maintenance - Software language reuse - Language evolution - Language families and variability * Domain-specific approaches for any aspects of SLE (design, implementation, validation, maintenance) * Empirical evaluation and experience reports of language engineering tools - User studies evaluating usability - Performance benchmarks - Industrial applications --------------------------- Important Dates --------------------------- All dates are Anywhere on Earth. * Fri 14 Jun 2019 - Abstract Submission * Fri 21 Jun 2019 - Paper Submission * Fri 9 Aug 2019 - Author Notification * Fri 16 Aug 2019 - Artifact Submission * Fri 30 Aug 2019 - Artifact Kick-the-tires Author Response (7 days) * Fri 20 Sep 2019 - Camera ready deadline * Wed 25 Sep 2019 - Artifact notification * Fri 27 Sep 2019 - Artifact-related paper updates * Mon-Tue 21-22 Oct 2018 - SLE Conference --------------------------- Types of Submissions --------------------------- SLE 2019 solicits three types of contributions: Research Papers, Tools Papers, and New Ideas/Vision papers. * Research papers These should report a substantial research contribution to SLE or successful application of SLE techniques or both. Full paper submissions must not exceed 12 pages, excluding bibliography. * Tool papers Because of SLE?s interest in tools, we seek papers that present software tools related to the field of SLE. Selection criteria include originality of the tool, its innovative aspects, and relevance to SLE. Any of the SLE topics of interest are appropriate areas for tool demonstrations. Submissions must provide a tool description of 4 pages excluding bibliography, and a demonstration outline including screenshots of up to 6 pages. Tool demonstrations must have the keywords ?Tool Demo? or ?Tool Demonstration? in the title. The 4-page tool description will, if the demonstration is accepted, be published in the proceedings. The 6-page demonstration outline will be used by the program committee only for evaluating the submission. *New ideas / vision papers New ideas papers should describe new, non-conventional SLE research approaches that depart from standard practice. They are intended to describe well-defined research ideas that are at an early stage of investigation. Vision papers are intended to present new unifying theories about existing SLE research that can lead to the development of new technologies or approaches. New ideas / vision papers must not exceed 4 pages, excluding bibliography. *Workshops Workshops will be organized by SPLASH. Please inform us and contact the SPLASH organizers if you would like to organize a workshop of interest to the SLE audience. Information on how to submit workshops can be found at the SPLASH 2019 Website. --------------------------- Artifact Evaluation --------------------------- SLE will continue to use an evaluation process for assessing the quality of the artifacts on which papers are based to foster the culture of experimental reproducibility. Authors of accepted papers are invited to submit artifacts. For more information, please have a look at the Artifact Evaluation page. --------------------------- Submission Details --------------------------- Paper Format: Submissions must conform to the ACM SIGPLAN Conference Format ?acmart?; please make sure that you always use the latest ACM SIGPLAN acmart LaTeX template, and that the document class definition is \documentclass[sigplan,screen]{acmart}. Do not make any changes to this format! Using the Word template is strongly discouraged. Ensure that your submission is legible when printed on a black and white printer. In particular, please check that colors remain distinct and font sizes in figures and tables are legible. To increase fairness in reviewing, a double-blind review process has become standard across SIGPLAN conferences. For the first time, SLE will follow the double-blind process. Author names and institutions should be omitted from submitted papers, and references to the authors? own related work should be in the third person. No other changes are necessary, and authors will not be penalized if reviewers are able to infer their identities in implicit ways. All submissions must be in PDF format. Concurrent Submissions: Papers must describe unpublished work that is not currently submitted for publication elsewhere as described by SIGPLAN?s Republication Policy. Submitters should also be aware of ACM?s Policy and Procedures on Plagiarism. Submissions that violate these policies will be desk-rejected. Submission Site: Submissions will be accepted at https://sle19.hotcrp.com/ --------------------------- Reviewing Process --------------------------- All submitted papers will be reviewed by at least three members of the program committee. Research papers and tool papers will be evaluated concerning novelty, correctness, significance, readability, and alignment with the conference call. New ideas / vision papers will be evaluated primarily concerning novelty, significance, readability, and alignment with the conference call. For fairness reasons, all submitted papers must conform to the above instructions. Submissions that violate these instructions may be rejected without review, at the discretion of the PC chairs. --------------------------- Awards --------------------------- * Distinguished paper: Award for most notable paper, as determined by the PC chairs based on the recommendations of the programme committee. * Distinguished reviewer: Award for distinguished reviewer, as determined by the PC chairs. * Distinguished artifact: Award for the artifact most significantly exceeding expectations, as determined by the AEC chairs based on the recommendations of the artifact evaluation committee. --------------------------- Publication --------------------------- All accepted papers will be published in the ACM Digital Library. AUTHORS TAKE NOTE: The official publication date is the date the proceedings are made available in the ACM Digital Library. This date may be up to two weeks prior to the first day of the conference. The official publication date affects the deadline for any patent filings related to published work. --------------------------- Organisation --------------------------- Chairs: * General chair: Oscar Nierstrasz (University of Bern, Switzerland) * Program co-chair: Bruno Oliveira (University of Hong Kong, China) * Program co-chair: Jeff Gray (University of Alabama, USA) * Artefact Evaluation co-chair: Emma S?derberg (Lund University, Sweden) * Artefact Evaluation co-chair: Abel Gomez (Universitat Oberta de Catalunya, Spain) Program Committee: Xuan Bi (Standard Chartered Bank) Erwan Bousse (TU Wien) Loli Burgeuno (Open University of Catalonia) Marsha Chechik (University of Toronto) Matteo Cimini (University of Massachusetts, Lowell) Thomas Degueule (CWI) Juan de Lara (Universidad Aut?noma de Madrid) Juergen Dingel (Queen's University) Romina Eramo (University of L'Aquila) Sebastian Gerard (CEA) Paolo Giarusso (TU Delft) Esther Guerra (Universidad Aut?noma de Madrid) Pablo Inostroza (CWI) Dimitris Kolovos (University of York) Marjan Mernik (University of Maribor) Alfonso Pierantonio (University of L'Aquila) Jaroslav Porub?n (University of Ko?ice) Casper Poulsen (TU Delft) Yann Regis-Gianas (Paris 7/INRIA) Bernhard Rumpe (RWTH Aachen University) Markus Schordan (Lawrence Livermore National Laboratory) Neil Sculthorpe (Nottingham Trent University) Marco Servetto (Victoria University of Wellington) Elizabeth Scott (Royal Holloway) Eugene Syriani (University of Montreal) Ulyana Tikhonova (CWI) Juha-Pekka Tolvanen (MetaCase) Antonio Valecillo (University of Malaga) Mark van den Brand (TU Eindhoven) Vadim Zaytsev (Raincode Labs) Tian Zhang (Nanjing University) --------------------------- Contact --------------------------- For additional information, clarification, or answers to questions, please contact the organizers by email (bruno at cs.hku.hk and gray at cs.ua.edu) -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Fri Mar 29 12:00:03 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 29 Mar 2019 14:00:03 +0300 Subject: [Agda] foldr _+_ vs foldl In-Reply-To: References: <1553776575.6558.22.camel@scico.botik.ru> Message-ID: <1553857203.2882.17.camel@one.mechvel.pereslavl.ru> I thank people for their comments. On Thu, 2019-03-28 at 14:22 +0100, Guillaume Brunerie wrote: > Hi Sergei, > > With foldl, you make Agda compute (?(1 + 1/2) + ?) + 1/29) + 1/30) > (associated to the left), whereas with foldr you make Agda compute (1 > + (1/2 + ? + (1/29 + 1/30)?) (associated to the right). > I think it makes sense that the second one is slower because the > denominators of the intermediate results grow much faster since the > beginning, compared to the first one : 1/28 + (1/29 + 1/30) has a > bigger denominator than ((1 + 1/2) + 1/3). > [..] I agree. foldl op b (reverse xs) may have a greatly different cost than foldl op b xs. In the example considered, it is cheaper to start with additions that produce a smaller denominator. Because the size of the currently obtained denominator effects the cost of all the further additions. This consideration does not depend on the choice of programming system. Then, we need to think of how to make a particular compiler to arrange addition in the needed order. Thanks, ----- Segei > Even though in the end you get the same result, the intermediate > calculations are more complicated in the case of foldr than in the > case of foldl. > > Best, > Guillaume > > Den tors 28 mars 2019 kl 14:14 skrev Sergei Meshveliani : > > > > People, > > > > I run > > sum : List Fraction ? Fraction > > sum = foldl _+fr_ 0fr > > > > to sum a list [1/m | (m : Integer) <- [1 .. 30]] > > > > of fractions, where _+fr_ is my home-made generic fraction addition. > > This example is expensive to run because the intermediate denominators > > grow somewhat like m!. > > > > But what is remarkable: changing foldl to foldr makes it slower 15 > > times. > > What is the source of this slowing down? > > > > I expect that only about 30 calls of _+fr_ or foldr(l) are put to stack > > in the worst case, and the stack occurs large because some of these > > calls contain large data inside. > > Then, it remains to find out how laziness relates to foldl and foldr in > > Agda, what MAlonzo makes of it, and how it is treated in GHC. > > (GHC has a certain strictness analysis ... > > and I recall that in GHC foldr was more lucky on average than foldl). > > > > What people would tell about this? > > > > Thanks, > > > > ------ > > Sergei > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > From mechvel at botik.ru Fri Mar 29 12:35:41 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 29 Mar 2019 14:35:41 +0300 Subject: [Agda] foldr _+_ vs foldl Message-ID: <1553859341.2882.46.camel@one.mechvel.pereslavl.ru> Apostolis Xekoukoulotakis apostolis.xekoukoulotakis at gmail.com writes > Just letting you know, that xekoukou/agda-ocaml is 3 times faster than > haskell (and on ocassions much faster) > It simply requires some love from the community. ( I have no time to work > on it, for the moment.) > > It is also strict, so you could check if the problem is strict evaluation > or not. 1. Haskell is a language. Do you mean the Glasgow Haskell tool? 2. Do you mean 3 times faster than lazy Agda compiled to Haskell and run by ghc ? 3. Do you mean this concrete example of summing rationals? Its cost depends mainly on which _built-in_ thing is used for arithmetic of large integers, this has nothing to do with the choice of any high-level language. 4. If you need to compare the GHC performance with your agda-ocaml, probably is more appropriate to compare them on implementing, say, a parser for the Agda syntax, or maybe, various parts of the type checker for Agda, to see how much the type check costs. 5. Strict evaluation is a different world. Lazy computation allows us to write a simpler code. If you write all your applications in assembly, they will most probably be several times faster further. Regards, ------ Sergei From apostolis.xekoukoulotakis at gmail.com Fri Mar 29 17:24:07 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Fri, 29 Mar 2019 18:24:07 +0200 Subject: [Agda] foldr _+_ vs foldl In-Reply-To: <1553873870.2327.46.camel@one.mechvel.pereslavl.ru> References: <1553859341.2882.46.camel@one.mechvel.pereslavl.ru> <1553873870.2327.46.camel@one.mechvel.pereslavl.ru> Message-ID: I do not know why it is faster , only that it is. It is using optimizations that others have done, the ocaml community, not me. ( I forgot to add the agda list to the email recepients, doing it now). On Fri, Mar 29, 2019 at 5:37 PM Sergei Meshveliani wrote: > > Also as agda-ocaml is strict, it has sense to compare it to Idris and > Coq. > > > > On Fri, 2019-03-29 at 15:54 +0200, Apostolis Xekoukoulotakis wrote: > > > > > > > > On Fri, Mar 29, 2019 at 1:35 PM Sergei Meshveliani > > wrote: > > > > Apostolis Xekoukoulotakis apostolis.xekoukoulotakis at > > gmail.com > > writes > > > > > Just letting you know, that xekoukou/agda-ocaml is 3 times > > faster than > > > haskell (and on ocassions much faster) > > > It simply requires some love from the community. ( I have no > > time to work > > > on it, for the moment.) > > > > > > It is also strict, so you could check if the problem is > > strict evaluation > > > or not. > > > > > > 1. Haskell is a language. Do you mean the Glasgow Haskell > > tool? > > > > 2. Do you mean 3 times faster than lazy Agda compiled to > > Haskell and run by ghc ? > > > > Yes, agda-ocaml is a backend , like MAlonzo and the javascript ones. > > > > > > 3. Do you mean this concrete example of summing rationals? > > Its cost depends mainly on which _built-in_ thing is used > > for arithmetic of large integers, > > this has nothing to do with the choice of any high-level > > language. > > > > > > The reason for the computational cost here is probably due to what the > > others said. > > > > I compiled a program about foldr / foldl with naturals instead of > > Rationals, and it is 3 times faster > > > > than the ghc backend. > > > > > > > > I use the zarith library to represent big integers, and naturals : > > > > https://github.com/ocaml/Zarith > > > > > > > > 4. If you need to compare the GHC performance with your > > agda-ocaml, probably is more appropriate > > to compare them on implementing, say, a parser for the Agda > > syntax, or maybe, > > various parts of the type checker for Agda, to see how much > > the type check costs. > > > > 5. Strict evaluation is a different world. Lazy computation > > allows us to write a simpler code. > > If you write all your applications in assembly, they will > > most probably be several times > > faster further. > > > > > > > > Because , agda is a total language, you can use either strict > > evaluation or lazy evaluation on the same agda code. > > > > > > With strict evaluation and with agda-ocaml, one needs to simply > > increase the limits of the stack to a big number so > > that it does not stack overflow. > > > > > > Regards, > > > > ------ > > Sergei > > > > > > > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Fri Mar 29 19:40:04 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Fri, 29 Mar 2019 19:40:04 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda Message-ID: Hi all, As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: data Delay (A : Set ?) : Set ? record Delay? (A : Set ?) : Set ? where coinductive field force : Delay A open Delay? public data Delay A where now : A ? Delay A later : Delay? A ? Delay A step : (x : Delay? A) ? later x ? x .force I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) Cheers, Jesper -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Sat Mar 30 14:39:36 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 30 Mar 2019 16:39:36 +0300 Subject: [Agda] BFLib for standard Message-ID: <1553953176.2337.14.camel@one.mechvel.pereslavl.ru> Dear standard library developers, I have a certain BFLib library for Agda: a regular-performance, complete, and certified * binary arithmetic for integer numbers, * and the arithmetic of fractions in the general case of fractions over arbitrary GCDRing. It has been tested under Agda 2.6.0-candidate, MAlonzo, ghc-8.6.3. I want to propose it as a replacement for the Bin part and Rational part in Standard library lib-0.18. First, I am going to put BFLib-0.01 to public as an application library, after it appears an official Agda 2.6.0. But then, I am going to propose its parts to standard, with modifying them, when necessary. BFLib suggests the three improvements. (I) Essentially faster implementation for `compare', show, gcd for Nat, for arithmetic of rational numbers. (II) Totally new Bin part (similar to binary-4 visible on GitHub). (III) Generic Fraction domain constructor to replace the Rational part. In particular, its instance works also for rational number arithmetic in binary representation. Can you, please, advise about possible way to propose? (probably, by pull resquests). Matthew wrote about pulling-request somewhat "a single item at a time". I try the following plan, and have questions related to most its parts. `compare' and `show' for Nat ============================ Pull-request Nat.<-cmp as compareFast (via _?_, _?_), toDecimalChars : ? ? List Char (via _%_, _div_), show : ? ? String show = String.fromList ? toDecimalChars -- fast `show` for ?, for ?. These three look easy to make the implementation replacement, it is backwards compatible. The division relation ===================== This is a large thing. In standard, it is only for ? and ? (the latter is by "on absoluteValue"): record _?_ (m n : ?) : Set where constructor divides field quotient : ? equality : n ? quotient * m open _?_ using (quotient) public I think, standard library needs generic Fraction over a GCDRing, this needs a generic GCD notions. And this needs, in its turn, a generic divisibility notion. I particular, it will serve also for ?, for pairs, for polynomials, and so on. If the library administrators do not want to consider such a proposal, then I would skip its pull request, in order to save effort. In this case there will remain only the Bin part to try (with special divisibility and gcd for Bin), and Fraction will be removed. BFLib defines the divisibility for Magma. First, the notion of a quotient is related to any _?_; _?_ : module _ {? ?=} (A : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier A)) where open Setoid A using (_?_) renaming (Carrier to C) RightQuotient : C ? C ? Set (? ? ?=) RightQuotient a b = ? (\q ? (b ? q) ? a) And the notion of divisibility is via RightQuotient: ------------------------------------------------------- module Magma-pack {? ?=} (M : Magma ? ?=) where open Magma M using (_?_; _?_; ?-cong; ?-cong?; setoid) renaming (Carrier to C) module FP? = FuncProp _?_ open Setoid-pack setoid public _?_ _?_ : Rel C (? ? ?=) x ? y = RightQuotient setoid _?_ y x -- `x divides y' _?_ x = ?_ ? _?_ x open EqR setoid ?cong : _?_ Respects2 _?_ ?cond = ... ... -------------------------------------------------------- Various properties of _?_ are derived for Magma, Semigroup, (Commutative)Monoid, Semiring, Ring, DecCommutativeRing (there is also introduced _??_ for some structures). The properties of _?_ for ? are expressed as the instances of the above generic properties for *-monoid, *-+-semiring in Nat.Properties. Similarly this is done for the instances for ?. Now, the property proofs in Nat.Divisibilty can be replaced with the instances of the generic proofs. For example, x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. But what to do with the divisibility definition in Nat.Divisibility ? I can try to generalize the standard record _?_ (m n : ?) : Set where constructor divides field quotient : ? equality : n ? quotient * m for Magma, and then to try to agree the things so that old applications like open Data.Nat.Divisibilty open _?_ ... will remain workable but will be done as an instance of the generic _?_ (if this is ever possible). On the other hand, as the approach to divisibility is so greatly generalized, may be, we can ignore the backwards compatibility at this point? Another question: does the definition RightQuotient a b = ? (\q ? (b ? q) ? a) x ? y = RightQuotient setoid _?_ y x look simpler and nicer? Really do we need a record here? "Packages" ========== The above implementation introduces several modules of this kind: module Magma-pack {? ?=} (M : Magma ? ?=), module Semigroup-pack {? ?=} (H : Semigroup ? ?=), ... module Ring-pack {? ?=} (R : Ring ? ?=) In each `pack' there are gathered most useful functions and lemmata (`items', theory) relating to a particular generic _standard_ structure: Magma, Semigroup, Group, Ring and so on. For example, divisibility in CommutativeRing has more proved properties than in Semigroup, many useful things can be proved for DecIntegralRing that are not possible for Semiring. And we cannot include these items to the records of the classical structures, because these records are intended to be classical definitions, and not a related theory containers. The minimality is provided: there are included only those items that are used in this proposal for standard. Can we, say, put Packages.agda to the Algebra/ folder and to put there the above 'pack' parametrized modules? Can a pull request introduce a new .agda file? There are much more questions to ask. But I try to follow the rule "a small item at a time". Regards, ------ Sergei From matthewdaggitt at gmail.com Sat Mar 30 15:40:41 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sat, 30 Mar 2019 22:40:41 +0800 Subject: [Agda] BFLib for standard In-Reply-To: <1553953176.2337.14.camel@one.mechvel.pereslavl.ru> References: <1553953176.2337.14.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, I'll try and answer all your questions. Apologies if I miss one. Can you, please, advise about possible way to propose? (probably, by pull > resquests). > > Matthew wrote about pulling-request somewhat "a single item at a time". > Yes, a single pull request (PR) per change is the right way to go. `compare' and `show' for Nat ============================ Nat.<-cmp as compareFast (via _?_, _?_), > Yup feel free to open a PR with this. toDecimalChars : ? ? List Char (via _%_, _div_), > A function very much like this already exists in `Data.Digit`. Have you seen it? show : ? ? String > Again this already exists in `Data.Nat.Show`. I take it the current implementation isn't fast enough? The division relation ===================== Now, the property proofs in Nat.Divisibilty can be replaced with the > instances of the generic proofs. For example, > x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. > > But what to do with the divisibility definition in Nat.Divisibility ? > I'm a bit confused about this. As I understand it, performance is quite important for you? Replacing the existing implementation of division for Nat (that uses built-ins) with a generic implementation is going to result in much worse performance. Is this really what you're after? "Packages" ========== In each `pack' there are gathered most useful functions and lemmata > (`items', theory) relating to a particular generic _standard_ structure: > Magma, Semigroup, Group, Ring and so on. > Such "packages" as you call them already exist in the standard library as "Properties" file. For instance all lemmata and functions for "Ring" live in "Algebra.Properties.Ring". Any extra lemmas and functions should be added there. Such files don't exist for all structures (e.g. magmas) but they can be added. There are much more questions to ask. But I try to follow the rule > "a small item at a time". > Thank you I appreciate it. Matthew On Sat, Mar 30, 2019 at 9:39 PM Sergei Meshveliani wrote: > Dear standard library developers, > > I have a certain BFLib library for Agda: > a regular-performance, complete, and certified > * binary arithmetic for integer numbers, > * and the arithmetic of fractions in the general case of > fractions over arbitrary GCDRing. > > It has been tested under Agda 2.6.0-candidate, MAlonzo, ghc-8.6.3. > I want to propose it as a replacement for the Bin part and Rational > part in Standard library lib-0.18. > > First, I am going to put BFLib-0.01 to public as an application > library, after it appears an official Agda 2.6.0. > > But then, I am going to propose its parts to standard, with modifying > them, when necessary. > > BFLib suggests the three improvements. > (I) Essentially faster implementation for `compare', show, gcd for Nat, > for arithmetic of rational numbers. > (II) Totally new Bin part (similar to binary-4 visible on GitHub). > (III) Generic Fraction domain constructor to replace the Rational part. > In particular, its instance works also for rational number > arithmetic in binary representation. > > > Can you, please, advise about possible way to propose? > (probably, by pull resquests). > > Matthew wrote about pulling-request somewhat "a single item at a time". > > > I try the following plan, and have questions related to most its parts. > > > `compare' and `show' for Nat > ============================ > > Pull-request > Nat.<-cmp as compareFast (via _?_, _?_), > > toDecimalChars : ? ? List Char (via _%_, _div_), > > show : ? ? String > show = String.fromList ? toDecimalChars -- fast `show` for ?, for ?. > > These three look easy to make the implementation replacement, it is > backwards compatible. > > > The division relation > ===================== > > This is a large thing. > In standard, it is only for ? and ? (the latter is by > "on absoluteValue"): > > record _?_ (m n : ?) : Set where > constructor divides > field quotient : ? > equality : n ? quotient * m > open _?_ using (quotient) public > > > I think, standard library needs generic Fraction over a GCDRing, > this needs a generic GCD notions. And this needs, in its turn, a generic > divisibility notion. I particular, it will serve also for ?, for pairs, > for polynomials, and so on. > > If the library administrators do not want to consider such a proposal, > then I would skip its pull request, in order to save effort. > In this case there will remain only the Bin part to try (with special > divisibility and gcd for Bin), and Fraction will be removed. > > BFLib defines the divisibility for Magma. > First, the notion of a quotient is related to any _?_; _?_ : > > module _ {? ?=} (A : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier A)) > where > open Setoid A using (_?_) renaming (Carrier to C) > > RightQuotient : C ? C ? Set (? ? ?=) > RightQuotient a b = ? (\q ? (b ? q) ? a) > > And the notion of divisibility is via RightQuotient: > > ------------------------------------------------------- > module Magma-pack {? ?=} (M : Magma ? ?=) > where > open Magma M using (_?_; _?_; ?-cong; ?-cong?; setoid) > renaming (Carrier to C) > module FP? = FuncProp _?_ > > open Setoid-pack setoid public > > _?_ _?_ : Rel C (? ? ?=) > x ? y = RightQuotient setoid _?_ y x -- `x divides y' > > _?_ x = ?_ ? _?_ x > > open EqR setoid > > ?cong : _?_ Respects2 _?_ > ?cond = ... > > ... > -------------------------------------------------------- > > Various properties of _?_ are derived for Magma, Semigroup, > (Commutative)Monoid, Semiring, Ring, DecCommutativeRing > (there is also introduced _??_ for some structures). > > The properties of _?_ for ? are expressed as the instances of the above > generic properties for *-monoid, *-+-semiring in Nat.Properties. > Similarly this is done for the instances for ?. > > Now, the property proofs in Nat.Divisibilty can be replaced with the > instances of the generic proofs. For example, > x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. > > But what to do with the divisibility definition in Nat.Divisibility ? > > I can try to generalize the standard > record _?_ (m n : ?) : Set where > constructor divides > field quotient : ? > equality : n ? quotient * m > > for Magma, and then to try to agree the things so that old applications > like > > open Data.Nat.Divisibilty > open _?_ > ... > > will remain workable but will be done as an instance of the generic _?_ > (if this is ever possible). > > On the other hand, as the approach to divisibility is so greatly > generalized, may be, we can ignore the backwards compatibility at this > point? > > Another question: does the definition > > RightQuotient a b = ? (\q ? (b ? q) ? a) > > x ? y = RightQuotient setoid _?_ y x > > look simpler and nicer? Really do we need a record here? > > > "Packages" > ========== > > The above implementation introduces several modules of this kind: > > module Magma-pack {? ?=} (M : Magma ? ?=), > module Semigroup-pack {? ?=} (H : Semigroup ? ?=), > ... > module Ring-pack {? ?=} (R : Ring ? ?=) > > In each `pack' there are gathered most useful functions and lemmata > (`items', theory) relating to a particular generic _standard_ structure: > Magma, Semigroup, Group, Ring and so on. > For example, divisibility in CommutativeRing has more proved properties > than in Semigroup, many useful things can be proved for DecIntegralRing > that are not possible for Semiring. And we cannot include these items to > the records of the classical structures, because these records are > intended to be classical definitions, and not a related theory > containers. > > The minimality is provided: there are included only those items that are > used in this proposal for standard. > > Can we, say, put Packages.agda to the Algebra/ folder and to put > there the above 'pack' parametrized modules? > Can a pull request introduce a new .agda file? > > There are much more questions to ask. But I try to follow the rule > "a small item at a time". > > Regards, > > ------ > Sergei > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Sat Mar 30 20:13:51 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 30 Mar 2019 22:13:51 +0300 Subject: [Agda] BFLib for standard In-Reply-To: References: <1553953176.2337.14.camel@one.mechvel.pereslavl.ru> Message-ID: <1553973231.2376.19.camel@one.mechvel.pereslavl.ru> On Sat, 2019-03-30 at 22:40 +0800, Matthew Daggitt wrote: > Hi Sergei, > I'll try and answer all your questions. Apologies if I miss one. > > > Can you, please, advise about possible way to propose? > (probably, by pull resquests). > > Matthew wrote about pulling-request somewhat "a single item at > a time". > > > Yes, a single pull request (PR) per change is the right way to go. > > > >`compare' and `show' for Nat > > ============================ > > > > Nat.<-cmp as compareFast (via _?_, _?_), > Yup feel free to open a PR with this. >> toDecimalChars : ? ? List Char (via _%_, _div_), > A function very much like this already exists in `Data.Digit`. Have > you seen it? >> show : ? ? String > Again this already exists in `Data.Nat.Show`. I take it the current > implementation isn't fast enough? Concerning Data.Digit.toDigits and Data.Nat.Show.show of standard: the latter function is implemented via the former one, and both are `exponentially' slow. This is demonstrated in my recent letter, somewhat a week ago, to which the test code is attached. Can you, please, run it and see that Data.Nat.Show is exponentially slow? (and hence Data.Digit.toDigits is as slow). Or may be, their implementation has changed last 2-3 weeks? I suggest to change the implementation for toDigits by using _%_ and _div_. This will make Digit.toDigits, Nat.Show.show and Integer.Show.show exponentially faster than the existing ones. The code is ready. > >> The division relation >> ===================== >> >> Now, the property proofs in Nat.Divisibilty can be replaced with >> the instances of the generic proofs. For example, >> x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. >> >> But what to do with the divisibility definition in >> Nat.Divisibility ? > I'm a bit confused about this. As I understand it, performance is > quite important for you? Replacing the existing implementation of > division for Nat (that uses built-ins) with a generic implementation > is going to result in much worse performance. Is this really what > you're after? > No,this part is not about the division _function_. This is about the definition of the divisibility relation _?_. There is nothing to evaluate, no performance matters here. This about defining the relation _?_ for a generic case. Then, by using the instance of *-magma for ?, one obtains the instance of _?_ for ?, by using the instance of *-magma for ?, one obtains the instance of _?_ for ?, by using the instance of *-magma for Bin, one obtains the instance of _?_ for Bin, and so on. And in standard, there are only special definitions of _?_: for ? and for ?. The question is about how to introduce a generic notion of _?_ with preserving backwards compatibility. Please, read once more the corresponding place in my original letter below (to which you are responding). This is the section "The division relation" -- which is better to title "The divisibility relation". > > "Packages" > > ========== > > In each `pack' there are gathered most useful functions and lemmata > > (`items', theory) relating to a particular generic _standard_ > > structure: > > Magma, Semigroup, Group, Ring and so on. > Such "packages" as you call them already exist in the standard library > as "Properties" file. For instance all lemmata and functions for > "Ring" live in "Algebra.Properties.Ring". Any extra lemmas and > functions should be added there. Such files don't exist for all > structures (e.g. magmas) but they can be added. I doubt about the word `Properties'. For example, consider the relation _|_ under Magma, and the function _^_ for powering an element in an arbitrary Monoid. Can they be called `properties' of Magma or a Monoid ? But if you are against "packages", all right, let them be Algebra.Properties.Magma, Algebra.Properties.Semigroup, and so on. Only they need to be presented as the modules parametrized respectively by (magma : Magma), (semigroup : Semigroup), and so on. I look now into Algebra.Properties.CommutativeMonoid, and see that this module is declared this way. Regards, ------ Sergei > On Sat, Mar 30, 2019 at 9:39 PM Sergei Meshveliani > wrote: > > Dear standard library developers, > > I have a certain BFLib library for Agda: > a regular-performance, complete, and certified > * binary arithmetic for integer numbers, > * and the arithmetic of fractions in the general case of > fractions over arbitrary GCDRing. > > It has been tested under Agda 2.6.0-candidate, MAlonzo, > ghc-8.6.3. > I want to propose it as a replacement for the Bin part and > Rational > part in Standard library lib-0.18. > > First, I am going to put BFLib-0.01 to public as an > application > library, after it appears an official Agda 2.6.0. > > But then, I am going to propose its parts to standard, with > modifying > them, when necessary. > > BFLib suggests the three improvements. > (I) Essentially faster implementation for `compare', show, gcd > for Nat, > for arithmetic of rational numbers. > (II) Totally new Bin part (similar to binary-4 visible on > GitHub). > (III) Generic Fraction domain constructor to replace the > Rational part. > In particular, its instance works also for rational > number > arithmetic in binary representation. > > > Can you, please, advise about possible way to propose? > (probably, by pull resquests). > > Matthew wrote about pulling-request somewhat "a single item at > a time". > > > I try the following plan, and have questions related to most > its parts. > > > `compare' and `show' for Nat > ============================ > > Pull-request > Nat.<-cmp as compareFast (via _?_, _?_), > > toDecimalChars : ? ? List Char (via _%_, _div_), > > show : ? ? String > show = String.fromList ? toDecimalChars -- fast `show` for > ?, for ?. > > These three look easy to make the implementation replacement, > it is > backwards compatible. > > > The division relation > ===================== > > This is a large thing. > In standard, it is only for ? and ? (the latter is by > "on absoluteValue"): > > record _?_ (m n : ?) : Set where > constructor divides > field quotient : ? > equality : n ? quotient * m > open _?_ using (quotient) public > > > I think, standard library needs generic Fraction over a > GCDRing, > this needs a generic GCD notions. And this needs, in its turn, > a generic > divisibility notion. I particular, it will serve also for ?, > for pairs, > for polynomials, and so on. > > If the library administrators do not want to consider such a > proposal, > then I would skip its pull request, in order to save effort. > In this case there will remain only the Bin part to try (with > special > divisibility and gcd for Bin), and Fraction will be removed. > > BFLib defines the divisibility for Magma. > First, the notion of a quotient is related to any _?_; _?_ : > > module _ {? ?=} (A : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier > A)) > where > open Setoid A using (_?_) renaming (Carrier to C) > > RightQuotient : C ? C ? Set (? ? ?=) > RightQuotient a b = ? (\q ? (b ? q) ? a) > > And the notion of divisibility is via RightQuotient: > > ------------------------------------------------------- > module Magma-pack {? ?=} (M : Magma ? ?=) > where > open Magma M using (_?_; _?_; ?-cong; ?-cong?; setoid) > renaming (Carrier to > C) > module FP? = FuncProp _?_ > > open Setoid-pack setoid public > > _?_ _?_ : Rel C (? ? ?=) > x ? y = RightQuotient setoid _?_ y x -- `x divides y' > > _?_ x = ?_ ? _?_ x > > open EqR setoid > > ?cong : _?_ Respects2 _?_ > ?cond = ... > > ... > -------------------------------------------------------- > > Various properties of _?_ are derived for Magma, Semigroup, > (Commutative)Monoid, Semiring, Ring, DecCommutativeRing > (there is also introduced _??_ for some structures). > > The properties of _?_ for ? are expressed as the instances of > the above > generic properties for *-monoid, *-+-semiring in > Nat.Properties. > Similarly this is done for the instances for ?. > > Now, the property proofs in Nat.Divisibilty can be replaced > with the > instances of the generic proofs. For example, > x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. > > But what to do with the divisibility definition in > Nat.Divisibility ? > > I can try to generalize the standard > record _?_ (m n : ?) : Set where > constructor divides > field quotient : ? > equality : n ? quotient * m > > for Magma, and then to try to agree the things so that old > applications > like > > open Data.Nat.Divisibilty > open _?_ > ... > > will remain workable but will be done as an instance of the > generic _?_ > (if this is ever possible). > > On the other hand, as the approach to divisibility is so > greatly > generalized, may be, we can ignore the backwards compatibility > at this > point? > > Another question: does the definition > > RightQuotient a b = ? (\q ? (b ? q) ? a) > > x ? y = RightQuotient setoid _?_ y x > > look simpler and nicer? Really do we need a record here? > > > "Packages" > ========== > > The above implementation introduces several modules of this > kind: > > module Magma-pack {? ?=} (M : Magma ? ?=), > module Semigroup-pack {? ?=} (H : Semigroup ? ?=), > ... > module Ring-pack {? ?=} (R : Ring ? ?=) > > In each `pack' there are gathered most useful functions and > lemmata > (`items', theory) relating to a particular generic _standard_ > structure: > Magma, Semigroup, Group, Ring and so on. > For example, divisibility in CommutativeRing has more proved > properties > than in Semigroup, many useful things can be proved for > DecIntegralRing > that are not possible for Semiring. And we cannot include > these items to > the records of the classical structures, because these records > are > intended to be classical definitions, and not a related theory > containers. > > The minimality is provided: there are included only those > items that are > used in this proposal for standard. > > Can we, say, put Packages.agda to the Algebra/ folder and > to put > there the above 'pack' parametrized modules? > Can a pull request introduce a new .agda file? > > There are much more questions to ask. But I try to follow the > rule > "a small item at a time". > > Regards, > > ------ > Sergei > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From matthewdaggitt at gmail.com Sun Mar 31 07:33:04 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sun, 31 Mar 2019 13:33:04 +0800 Subject: [Agda] BFLib for standard In-Reply-To: <1553973231.2376.19.camel@one.mechvel.pereslavl.ru> References: <1553953176.2337.14.camel@one.mechvel.pereslavl.ru> <1553973231.2376.19.camel@one.mechvel.pereslavl.ru> Message-ID: > Concerning Data.Digit.toDigits and Data.Nat.Show.show of standard: > the latter function is implemented via the former one, and both are > `exponentially' slow. > I suggest to change the implementation for toDigits by using _%_ and > _div_. This will make Digit.toDigits, Nat.Show.show and Integer.Show.show > exponentially faster than the existing ones. The code is ready. > Okay sounds good. Feel free to open a PR with the changes. No, this part is not about the division _function_. This is about the > definition of the divisibility relation _?_. > Thank you for explaining, I got confused, but I understand now. Yes a generic notion of divisibility would be a useful addition to the library. And the notion of divisibility is via RightQuotient: > The RightQuotient notion looks useful. I believe the right place for it would be in `Algebra.FunctionProperties` (where it doesn't need to parameterised by a setoid, but simply the equality relation instead). On the other hand, as the approach to divisibility is so greatly > generalized, may be, we can ignore the backwards compatibility at this > point? Whether or not to replace the existing divisibility relation with the new one can be decided at a later date. I doubt about the word `Properties'. For example, consider the relation > _|_ under Magma, and the function _^_ for powering an element in an > arbitrary Monoid. Can they be called `properties' of Magma or a Monoid ? > So we also have `Algebra.Operations.CommutativeMonoid` which has operation like `_^_`. Conceivably we could add a `Algebra.Relations` as well. The discussion for how this stage of the changes should be laid out should really be continued in an issue on Github. If you'd like to open an issue there? Best, Matthew On Sun, Mar 31, 2019 at 3:13 AM Sergei Meshveliani wrote: > On Sat, 2019-03-30 at 22:40 +0800, Matthew Daggitt wrote: > > Hi Sergei, > > I'll try and answer all your questions. Apologies if I miss one. > > > > > > Can you, please, advise about possible way to propose? > > (probably, by pull resquests). > > > > Matthew wrote about pulling-request somewhat "a single item at > > a time". > > > > > > Yes, a single pull request (PR) per change is the right way to go. > > > > > > >`compare' and `show' for Nat > > > ============================ > > > > > > Nat.<-cmp as compareFast (via _?_, _?_), > > > Yup feel free to open a PR with this. > > > >> toDecimalChars : ? ? List Char (via _%_, _div_), > > > A function very much like this already exists in `Data.Digit`. Have > > you seen it? > > >> show : ? ? String > > > Again this already exists in `Data.Nat.Show`. I take it the current > > implementation isn't fast enough? > > > Concerning Data.Digit.toDigits and Data.Nat.Show.show of standard: > the latter function is implemented via the former one, > and both are `exponentially' slow. > This is demonstrated in my recent letter, somewhat a week ago, to which > the test code is attached. > Can you, please, run it and see that Data.Nat.Show is exponentially > slow? > (and hence Data.Digit.toDigits is as slow). > Or may be, their implementation has changed last 2-3 weeks? > > I suggest to change the implementation for toDigits by using _%_ and > _div_. > This will make Digit.toDigits, Nat.Show.show and Integer.Show.show > exponentially faster than the existing ones. The code is ready. > > > > >> The division relation > >> ===================== > > >> > >> Now, the property proofs in Nat.Divisibilty can be replaced with > >> the instances of the generic proofs. For example, > >> x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. > >> > >> But what to do with the divisibility definition in > >> Nat.Divisibility ? > > > I'm a bit confused about this. As I understand it, performance is > > quite important for you? Replacing the existing implementation of > > division for Nat (that uses built-ins) with a generic implementation > > is going to result in much worse performance. Is this really what > > you're after? > > > > No,this part is not about the division _function_. This is about the > definition of the divisibility relation _?_. > There is nothing to evaluate, no performance matters here. > This about defining the relation _?_ for a generic case. > Then, by using the instance of *-magma for ?, one obtains the instance > of _?_ for ?, by using the instance of *-magma for ?, one obtains the > instance of _?_ for ?, by using the instance of *-magma for Bin, one > obtains the instance of _?_ for Bin, and so on. > And in standard, there are only special definitions of _?_: for ? and > for ?. > The question is about how to introduce a generic notion of _?_ with > preserving backwards compatibility. > Please, read once more the corresponding place in my original letter > below (to which you are responding). This is the section > "The division relation" -- which is better to title > "The divisibility relation". > > > > > "Packages" > > > ========== > > > > In each `pack' there are gathered most useful functions and lemmata > > > (`items', theory) relating to a particular generic _standard_ > > > structure: > > > Magma, Semigroup, Group, Ring and so on. > > > > Such "packages" as you call them already exist in the standard library > > as "Properties" file. For instance all lemmata and functions for > > "Ring" live in "Algebra.Properties.Ring". Any extra lemmas and > > functions should be added there. Such files don't exist for all > > structures (e.g. magmas) but they can be added. > > > I doubt about the word `Properties'. For example, consider the relation > _|_ under Magma, and the function _^_ for powering an element in an > arbitrary Monoid. Can they be called `properties' of Magma or a Monoid ? > > But if you are against "packages", all right, let them be > Algebra.Properties.Magma, Algebra.Properties.Semigroup, and so on. > Only they need to be presented as the modules parametrized respectively > by (magma : Magma), (semigroup : Semigroup), and so on. > I look now into Algebra.Properties.CommutativeMonoid, and see that this > module is declared this way. > > Regards, > > ------ > Sergei > > > > > On Sat, Mar 30, 2019 at 9:39 PM Sergei Meshveliani > > wrote: > > > > Dear standard library developers, > > > > I have a certain BFLib library for Agda: > > a regular-performance, complete, and certified > > * binary arithmetic for integer numbers, > > * and the arithmetic of fractions in the general case of > > fractions over arbitrary GCDRing. > > > > It has been tested under Agda 2.6.0-candidate, MAlonzo, > > ghc-8.6.3. > > I want to propose it as a replacement for the Bin part and > > Rational > > part in Standard library lib-0.18. > > > > First, I am going to put BFLib-0.01 to public as an > > application > > library, after it appears an official Agda 2.6.0. > > > > But then, I am going to propose its parts to standard, with > > modifying > > them, when necessary. > > > > BFLib suggests the three improvements. > > (I) Essentially faster implementation for `compare', show, gcd > > for Nat, > > for arithmetic of rational numbers. > > (II) Totally new Bin part (similar to binary-4 visible on > > GitHub). > > (III) Generic Fraction domain constructor to replace the > > Rational part. > > In particular, its instance works also for rational > > number > > arithmetic in binary representation. > > > > > > Can you, please, advise about possible way to propose? > > (probably, by pull resquests). > > > > Matthew wrote about pulling-request somewhat "a single item at > > a time". > > > > > > I try the following plan, and have questions related to most > > its parts. > > > > > > `compare' and `show' for Nat > > ============================ > > > > Pull-request > > Nat.<-cmp as compareFast (via _?_, _?_), > > > > toDecimalChars : ? ? List Char (via _%_, _div_), > > > > show : ? ? String > > show = String.fromList ? toDecimalChars -- fast `show` for > > ?, for ?. > > > > These three look easy to make the implementation replacement, > > it is > > backwards compatible. > > > > > > The division relation > > ===================== > > > > This is a large thing. > > In standard, it is only for ? and ? (the latter is by > > "on absoluteValue"): > > > > record _?_ (m n : ?) : Set where > > constructor divides > > field quotient : ? > > equality : n ? quotient * m > > open _?_ using (quotient) public > > > > > > I think, standard library needs generic Fraction over a > > GCDRing, > > this needs a generic GCD notions. And this needs, in its turn, > > a generic > > divisibility notion. I particular, it will serve also for ?, > > for pairs, > > for polynomials, and so on. > > > > If the library administrators do not want to consider such a > > proposal, > > then I would skip its pull request, in order to save effort. > > In this case there will remain only the Bin part to try (with > > special > > divisibility and gcd for Bin), and Fraction will be removed. > > > > BFLib defines the divisibility for Magma. > > First, the notion of a quotient is related to any _?_; _?_ : > > > > module _ {? ?=} (A : Setoid ? ?=) (_?_ : Op? (Setoid.Carrier > > A)) > > where > > open Setoid A using (_?_) renaming (Carrier to C) > > > > RightQuotient : C ? C ? Set (? ? ?=) > > RightQuotient a b = ? (\q ? (b ? q) ? a) > > > > And the notion of divisibility is via RightQuotient: > > > > ------------------------------------------------------- > > module Magma-pack {? ?=} (M : Magma ? ?=) > > where > > open Magma M using (_?_; _?_; ?-cong; ?-cong?; setoid) > > renaming (Carrier to > > C) > > module FP? = FuncProp _?_ > > > > open Setoid-pack setoid public > > > > _?_ _?_ : Rel C (? ? ?=) > > x ? y = RightQuotient setoid _?_ y x -- `x divides y' > > > > _?_ x = ?_ ? _?_ x > > > > open EqR setoid > > > > ?cong : _?_ Respects2 _?_ > > ?cond = ... > > > > ... > > -------------------------------------------------------- > > > > Various properties of _?_ are derived for Magma, Semigroup, > > (Commutative)Monoid, Semiring, Ring, DecCommutativeRing > > (there is also introduced _??_ for some structures). > > > > The properties of _?_ for ? are expressed as the instances of > > the above > > generic properties for *-monoid, *-+-semiring in > > Nat.Properties. > > Similarly this is done for the instances for ?. > > > > Now, the property proofs in Nat.Divisibilty can be replaced > > with the > > instances of the generic proofs. For example, > > x ? y ? x ? z ? x ? (y + z) is proved in Semiring-pack. > > > > But what to do with the divisibility definition in > > Nat.Divisibility ? > > > > I can try to generalize the standard > > record _?_ (m n : ?) : Set where > > constructor divides > > field quotient : ? > > equality : n ? quotient * m > > > > for Magma, and then to try to agree the things so that old > > applications > > like > > > > open Data.Nat.Divisibilty > > open _?_ > > ... > > > > will remain workable but will be done as an instance of the > > generic _?_ > > (if this is ever possible). > > > > On the other hand, as the approach to divisibility is so > > greatly > > generalized, may be, we can ignore the backwards compatibility > > at this > > point? > > > > Another question: does the definition > > > > RightQuotient a b = ? (\q ? (b ? q) ? a) > > > > x ? y = RightQuotient setoid _?_ y x > > > > look simpler and nicer? Really do we need a record here? > > > > > > "Packages" > > ========== > > > > The above implementation introduces several modules of this > > kind: > > > > module Magma-pack {? ?=} (M : Magma ? ?=), > > module Semigroup-pack {? ?=} (H : Semigroup ? ?=), > > ... > > module Ring-pack {? ?=} (R : Ring ? ?=) > > > > In each `pack' there are gathered most useful functions and > > lemmata > > (`items', theory) relating to a particular generic _standard_ > > structure: > > Magma, Semigroup, Group, Ring and so on. > > For example, divisibility in CommutativeRing has more proved > > properties > > than in Semigroup, many useful things can be proved for > > DecIntegralRing > > that are not possible for Semiring. And we cannot include > > these items to > > the records of the classical structures, because these records > > are > > intended to be classical definitions, and not a related theory > > containers. > > > > The minimality is provided: there are included only those > > items that are > > used in this proposal for standard. > > > > Can we, say, put Packages.agda to the Algebra/ folder and > > to put > > there the above 'pack' parametrized modules? > > Can a pull request introduce a new .agda file? > > > > There are much more questions to ask. But I try to follow the > > rule > > "a small item at a time". > > > > Regards, > > > > ------ > > Sergei > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From asr at eafit.edu.co Mon Apr 1 00:19:32 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Sun, 31 Mar 2019 22:19:32 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 2 Message-ID: Dear all, The Agda Team is very pleased to announce the second release candidate of Agda 2.6.0. Installation ======= This RC can be installed using the following instructions: $ cabal install https://hackage.haskell.org/package/Agda-2.5.4.2.20190330/candidate/Agda-2.5.4.2.20190330.tar.gz or $ cabal get https://hackage.haskell.org/package/Agda-2.5.4.2.20190330/candidate/Agda-2.5.4.2.20190330.tar.gz $ cd Agda-2.5.4.2.20190330 $ cabal install GHC supported versions =============== This RC has been tested with GHC 8.6.4, 8.4.4, 8.2.2, 8.0.2 and 7.10.3 on Linux, macOS and Windows. Note that this RC cannot be installed on Windows using GHC 8.6.3 due to a GHC bug. Standard library ========== For the time being, you can use the *experimental* branch of the standard library which is compatible with this RC. This branch of the standard library is available at https://github.com/agda/agda-stdlib/ Highlights ====== * Added support for Cubical Agda (https://agda.readthedocs.io/en/latest/language/cubical.html) which adds new features such as univalence and higher inductive types to Agda. * Added support for ML-style automatic generalization of variables (https://agda.readthedocs.io/en/latest/language/generalization-of-declared-variables.html). * Added a new sort `Prop` of definitionally proof-irrelevant propositions (https://agda.readthedocs.io/en/latest/language/prop.html). * The implementation of instance search (https://agda.readthedocs.io/en/latest/language/instance-arguments.html) got a major overhaul and no longer supports overlapping instances (unless enabled by a flag). Complete list of changes and fixed issues ========================= http://hackage.haskell.org/package/Agda-2.5.4.2.20190330/candidate/changelog Enjoy the RC and please test as much as possible. -- Andr?s on behalf of the Agda Team From mechvel at botik.ru Mon Apr 1 14:39:48 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Mon, 01 Apr 2019 15:39:48 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 2 In-Reply-To: References: Message-ID: <1554122388.2369.9.camel@one.mechvel.pereslavl.ru> On Sun, 2019-03-31 at 22:19 +0000, Andres Sicard Ramirez wrote: > Dear all, > > The Agda Team is very pleased to announce the second release candidate > of Agda 2.6.0. > [..] I have tested it under ghc-8.6.3, MAlonzo, Ubuntu Linux 18.04 on certain libraries Binary, Fraction, Poly. It looks all right. The following changes relatively to March 15 have been forced in the application source: filter?? --> filter? ..All.Properties.filter?? --> all-filter Relation.Binary.List.Pointwise --> Data.List... Relation.Binary.Product.Pointwise --> Data.Product.Relation.Binary.Pointwise.NonDependent Regards, ------ Sergei From asr at eafit.edu.co Mon Apr 1 14:49:54 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Mon, 1 Apr 2019 12:49:54 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 2 In-Reply-To: <1554122388.2369.9.camel@one.mechvel.pereslavl.ru> References: <1554122388.2369.9.camel@one.mechvel.pereslavl.ru> Message-ID: On Mon, 1 Apr 2019 at 07:39, Sergei Meshveliani wrote: > > On Sun, 2019-03-31 at 22:19 +0000, Andres Sicard Ramirez wrote: > > Dear all, > > > > The Agda Team is very pleased to announce the second release candidate > > of Agda 2.6.0. > > [..] > > > I have tested it under ghc-8.6.3, MAlonzo, Ubuntu Linux 18.04 > on certain libraries Binary, Fraction, Poly. > It looks all right. Thank you for your feedback. -- Andr?s From hancock at fastmail.fm Mon Apr 1 20:20:41 2019 From: hancock at fastmail.fm (Peter Hancock) Date: Mon, 1 Apr 2019 19:20:41 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 2 In-Reply-To: References: Message-ID: <89dee641-c3cb-a23f-5024-99120ec12fa9@fastmail.fm> On 31/03/2019 23:19, Andres Sicard Ramirez wrote: > $ cabal get https://hackage.haskell.org/package/Agda-2.5.4.2.20190330/candidate/Agda-2.5.4.2.20190330.tar.gz > $ cd Agda-2.5.4.2.20190330 > $ cabal install I tried this route, on a Fedora fc29 system, using ghc version 8.6.4 from Fedora Modular. I kept getting: " cabal: Error: some packages failed to install: Agda-2.5.4.2.20190330 failed during the final install step. The exception was: user error (Couldn't parse the output of 'setup register --gen-pkg-config':NoParse "license" 5) " no matter how much I floundered around pursuing hunches. (eg, I tried re-cabaling cabal-install, to 2.4.1.0.) Portions of the string above seem to crop quite a bit on google, and to indicate, possibly, some minor ghc/cabal/fedora flakiness. If anyone has some suggestions, I can try them out. Hank From hancock at fastmail.fm Mon Apr 1 20:52:01 2019 From: hancock at fastmail.fm (Peter Hancock) Date: Mon, 1 Apr 2019 19:52:01 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 release candidate 2 In-Reply-To: <89dee641-c3cb-a23f-5024-99120ec12fa9@fastmail.fm> References: <89dee641-c3cb-a23f-5024-99120ec12fa9@fastmail.fm> Message-ID: Oh wait, it worked(/built)! it = Agda version 2.5.4.2.20190330 cabal-install version 2.4.1.0 compiled using version 2.4.1.0 of the Cabal library The Glorious Glasgow Haskell Compilation System, version 8.6.4 This may have been due to a just previous cabal update. There was some scolding: "Warning: The install command is a part of the legacy v1 style of cabal usage. Please switch to using either the new project style and the new-install command or the legacy v1-install alias as new-style projects will become the default in the next version of cabal-install. Please file a bug if you cannot replicate a working v1- use case with the new-style commands. For more information, see: https://wiki.haskell.org/Cabal/NewBuild " Hank From chantal.keller at wanadoo.fr Tue Apr 2 09:39:25 2019 From: chantal.keller at wanadoo.fr (Chantal Keller) Date: Tue, 2 Apr 2019 09:39:25 +0200 Subject: [Agda] PxTP 2019 - Call for Papers Message-ID: [Please accept our apologies for duplicates] ============================================== Call for Papers, PxTP 2019 The Sixth International Workshop on Proof eXchange for Theorem Proving (PxTP) http://pxtp.gforge.inria.fr/2019/ 25-26 August 2019, Natal, Brazil associated with the CADE-27 conference ## Background The PxTP workshop brings together researchers working on various aspects of communication, integration, and cooperation between reasoning systems and formalisms. The progress in computer-aided reasoning, both automatic and interactive, during the past decades, has made it possible to build deduction tools that are increasingly more applicable to a wider range of problems and are able to tackle larger problems progressively faster. In recent years, cooperation of such tools in larger verification environments has demonstrated the potential to reduce the amount of manual intervention. Examples include the Sledgehammer tool providing an interface between Isabelle and (untrusted) automated provers, and collaboration of the HOL Light and Isabelle systems in the formal proof of the Kepler conjecture. Cooperation between reasoning systems relies on availability of theoretical formalisms and practical tools for exchanging problems, proofs, and models. The PxTP workshop strives to encourage such cooperation by inviting contributions on suitable integration, translation, and communication methods, standards, protocols, and programming interfaces. The workshop welcomes developers of automated and interactive theorem proving tools, developers of combined systems, developers and users of translation tools and interfaces, and producers of standards and protocols. We are interested both in success stories and descriptions of current bottlenecks and proposals for improvement. ## Topics Topics of interest for this workshop include all aspects of cooperation between reasoning tools, whether automatic or interactive. More specifically, some suggested topics are: * applications that integrate reasoning tools (ideally with certification of the result); * interoperability of reasoning systems; * translations between logics, proof systems, models; * distribution of proof obligations among heterogeneous reasoning tools; * algorithms and tools for checking and importing (replaying, reconstructing) proofs; * proposed formats for expressing problems and solutions for different classes of logic solvers (SAT, SMT, QBF, first-order logic, higher-order logic, typed logic, rewriting, etc.); * meta-languages, logical frameworks, communication methods, standards, protocols, and APIs related to problems, proofs, and models; * comparison, refactoring, transformation, migration, compression and optimization of proofs; * data structures and algorithms for improved proof production in solvers (e.g., efficient proof representations); * (universal) libraries, corpora and benchmarks of proofs and theories; * alignment of diverse logics, concepts and theories across systems and libraries; * engineering aspects of proofs (e.g., granularity, flexiformality, persistence over time); * proof certificates; * proof checking; * mining of (mathematical) information from proofs (e.g., quantifier instantiations, unsat cores, interpolants, ...); * reverse engineering and understanding of formal proofs; * universality of proofs (i.e. interoperability of proofs between different proof calculi); * origins and kinds of proofs (e.g., (in)formal, automatically generated, interactive, ...) * Hilbert's 24th Problem (i.e. what makes a proof better than another?); * social aspects (e.g., community-wide initiatives related to proofs, cooperation between communities, the future of (formal) proofs); * applications relying on importing proofs from automatic theorem provers, such as certified static analysis, proof-carrying code, or certified compilation; * application-oriented proof theory; * practical experiences, case studies, feasibility studies. ## Submissions Researchers interested in participating are invited to submit either an extended abstract (up to 8 pages) or a regular paper (up to 15 pages). Submissions will be refereed by the program committee, which will select a balanced program of high-quality contributions. Short submissions that could stimulate fruitful discussion at the workshop are particularly welcome. We expect that one author of every accepted paper will present their work at the workshop. Submitted papers should describe previously unpublished work, and must be prepared using the LaTeX EPTCS class (http://style.eptcs.org/). Papers will be submitted via EasyChair, at the PxTP'2019 workshop page (https://easychair.org/conferences/?conf=pxtp2019). Accepted regular papers will appear in an EPTCS volume. # Important Dates * Abstract submission: May 12, 2019 * Paper submission: May 19, 2019 * Notification: June 21, 2019 * Camera ready versions due: July 14, 2019 * Workshop: 25-26 August 2019 ## Invited Speakers TBA ## Program Committee * Haniel Barbosa (University of Iowa), co-chair * Giselle Reis (Carnegie Mellon University), co-chair * Roberto Blanco, Inria, France * Fr?d?ric Blanqui, Inria, France * Simon Cruanes, Aesthetic Integration, USA * Catherine Dubois, ENSIIE, France * Amy Felty, University of Ottawa, Canada * Mathias Fleury, Max-Planck-Institut f?r Informatik, Germany * St?phane Graham-Lengrand, SRI, USA * Cezary Kaliszyk, University of Innsbruck, Austria * Chantal Keller, LRI, Universit? Paris-Sud, France * Laura Kov?cs, TU Wien, Austria * Olivier Laurent, CNRS, ENS Lyon, France * Stefan Mitsch, Carnegie Mellon University, USA * Carlos Olarte, UFRN, Brazil * Bruno Woltzenlogel Paleo, IOHK, Australia * Florian Rabe, LRI, Universit? Paris-Sud, France * Martin Riener, University of Manchester, UK * Geoff Sutcliffe, University of Miami, USA * Josef Urban, Czech Institute of Informatics, Robotics and Cybernetics (CIIRC), Czech Republic * Yoni Zohar, Stanford University, USA ## Previous PxTP Editions * PxTP 2017 (https://pxtp.github.io/2017/), affiliated to Tableaux 2017, FroCoS 2017 and ITP 2017 * PxTP 2015 (http://pxtp15.lri.fr/), affiliated to CADE-25 * PxTP 2013 (http://www.cs.ru.nl/pxtp13/), affiliated to CADE-24 * PxTP 2012 (http://pxtp2012.inria.fr/), affiliated to IJCAR 2012 * PxTP 2011 (http://pxtp2011.loria.fr/), affiliated to CADE-23 From henning at basold.eu Tue Apr 2 11:14:16 2019 From: henning at basold.eu (Henning Basold) Date: Tue, 2 Apr 2019 11:14:16 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: Message-ID: -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Hi Jesper, When I experimented with the delay monad, I used the code below. Note that this uses vanilla Agda and no cubical/HITs. I suppose, however, that the same should work with cubical, as the first property proceeds by induction on the termination proof, which in turns does not use any HITs. The second property is merely unfolding bisimilarity one step. I hope this helps. Cheers, Henning - -- Preliminaries open import Function open import Data.Empty open import Data.Sum as Sum open import Data.Sum.Properties open import Relation.Nullary open import Relation.Binary.PropositionalEquality open import Relation.Binary renaming (Rel to RelP) Rel : Set ? Set? Rel A = RelP A _ inj??inj? : {A B : Set} {a : A} {b : B} ? inj? a ? inj? b ? {C : Set} ? C inj??inj? () - -- Delay monad record D (A : Set) : Set where coinductive field step : A ? D A open D public ? : {A : Set} ? D A ? .step = inj? ? - -- Bisimilarity via relation lifting data Delay-Ext {A B : Set} (R : Rel A) (S : Rel B) : Rel (A ? B) where now : {x y : A} ? R x y ? Delay-Ext R S (inj? x) (inj? y) later : {x y : B} ? S x y ? Delay-Ext R S (inj? x) (inj? y) record DRel {A : Set} (R : Rel A) (x y : D A) : Set where coinductive field step : Delay-Ext R (DRel R) (x .step) (y .step) open DRel public _~_ : {A : Set} (x y : D A) ? Set _~_ {A} = DRel _?_ data _?? {A : Set} (d : D A) : Set where now : (a : A) ? d .step ? inj? a ? d ?? later : {d' : D A} ? d' ?? ? d .step ? inj? d' ? d ?? - -- And then you get the desired results with the following, - -- rather crude, proofs: ?-non-terminating : ? {A} ? ? (? {A} ??) ?-non-terminating (now a e) = inj??inj? (sym e) ?-non-terminating (later p e) with inj?-injective e ?-non-terminating (later p e) | refl = ?-non-terminating p ?-not-now : ? {A} x ? ? (? {A} ~ return x) ?-not-now x p with p .step ?-not-now x p | () On 29/03/2019 19:40, Jesper Cockx wrote: > Hi all, > > As an experiment with cubical agda, I was trying to define a > quotiented version of the Delay monad as a higher inductive type. > I'm using this definition: > > data Delay (A : Set ?) : Set ? > > record Delay? (A : Set ?) : Set ? where coinductive field force : > Delay A > > open Delay? public > > data Delay A where now : A ? Delay A later : Delay? A ? Delay A > step : (x : Delay? A) ? later x ? x .force > > I managed to implement some basic functions on it but I got stuck > on trying to prove the looping computation 'never' does not in fact > evaluate to any value. My code is available here: > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f 08e23630221cc3d9 > > I looked at the problem together with Christian Sattler and we are not e ven > sure it is actually provable. Does anyone have an idea how to > proceed? Or has someone already experimented with coinductive types > in cubical and encountered similar problems? (I looked at the paper > "Partiality revisited" by Thorsten, Nisse and Nicolai but they use > a very different definition of the partiality monad.) > > Cheers, Jesper > > > _______________________________________________ Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlyjJ+UACgkQatBsEc2x Mm7ssRAApnhxYylfbxU0f6vQKm0y1MSL1kZ6jleKdpGDcYQObaACGVoIQ3BBoOw1 XqEiInf+uegeNIsWU9D0xOhTFrpn9b4eaDWgeZYuivc4KcUr4QjtrFlT4D/3wLHq UlApjDmrcIrIgF4IR1lqn7gblAd8JES4uIwb5nGfbQXnp/sT0Ewv39Ap+0hIKMsf S5g1rrzARzsPWkQC8Rx3pUZTUCMA7TB7MPDm9AiKYf70QC3vrmQPIAOt1EfMdwQW cJfxgCV6Ayo0nmhAXXLq92+JZCjavdaeS0/o56MWCvLn3tS+/U0mUzBfGXG6Cevg gsbFWdtmpPLXvt79wC93wB+h/uZ5vcKkdmsVKNKnlA46xOigv3nbWYkWymJ6/Xnf jI7jhWMZxCQZEvzWVC9IgYA17M/uUIBe6tx3F4WP3o49OMxX9qMVdBhIwRsJ4nIn LkSQPAbTob0XNYEDFfaow9h2usOqXC1rj5TJtBYr7aiK1qgmpeXWYw6L5P/vSN7i bGYl3PqtjPHIgtL14Xin2bvihSuMcYwd3pfoTHZ5Eb1ORJ2BipUIhlj+jBfsEmU5 YGRZB7bovnHldYAY4iiX5SvafgJUoTySieVcYiuHxc4tQs1NZSLOUNok88B5HnK1 KEzghZe+tGi2weP7JyuUuQ9iBH7NPlyswbPLQSHkklULk3pq7Ps= =r8V9 -----END PGP SIGNATURE----- From Jesper at sikanda.be Tue Apr 2 11:30:47 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 2 Apr 2019 11:30:47 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: Message-ID: Hi Henning, Thanks for your mail. Maybe I misunderstand, but isn't this just the Delay monad as defined in the standard library ( https://github.com/agda/agda-stdlib/blob/master/src/Codata/Delay.agda)? My goal was to define a version of the Delay monad where `now x` is definitionally equal to `x .force`. Supposedly this should be possible to define as a higher inductive type in cubical Agda, but I'm suspecting now that my definition is not the right one. The paper "Partiality, revisited" does achieve the goal of defining the proper 'quotiented' Delay monad but it uses a very different definition of the Delay monad and needs to introduce quite some infrastructure to make it work. -- Jesper On Tue, Apr 2, 2019 at 11:14 AM Henning Basold wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > Hi Jesper, > > When I experimented with the delay monad, I used the code below. Note > that this uses vanilla Agda and no cubical/HITs. I suppose, however, > that the same should work with cubical, as the first property proceeds > by induction on the termination proof, which in turns does not use any > HITs. The second property is merely unfolding bisimilarity one step. > > I hope this helps. > > Cheers, > Henning > > - -- Preliminaries > open import Function > open import Data.Empty > open import Data.Sum as Sum > open import Data.Sum.Properties > open import Relation.Nullary > open import Relation.Binary.PropositionalEquality > > open import Relation.Binary renaming (Rel to RelP) > > Rel : Set ? Set? > Rel A = RelP A _ > > inj??inj? : {A B : Set} {a : A} {b : B} ? inj? a ? inj? b ? > {C : Set} ? C > inj??inj? () > > - -- Delay monad > record D (A : Set) : Set where > coinductive > field step : A ? D A > open D public > > ? : {A : Set} ? D A > ? .step = inj? ? > > - -- Bisimilarity via relation lifting > data Delay-Ext {A B : Set} (R : Rel A) (S : Rel B) : Rel (A ? B) where > now : {x y : A} ? R x y ? Delay-Ext R S (inj? x) (inj? y) > later : {x y : B} ? S x y ? Delay-Ext R S (inj? x) (inj? y) > > record DRel {A : Set} (R : Rel A) (x y : D A) : Set where > coinductive > field step : Delay-Ext R (DRel R) (x .step) (y .step) > open DRel public > > _~_ : {A : Set} (x y : D A) ? Set > _~_ {A} = DRel _?_ > > data _?? {A : Set} (d : D A) : Set where > now : (a : A) ? d .step ? inj? a ? d ?? > later : {d' : D A} ? d' ?? ? d .step ? inj? d' ? d ?? > > - -- And then you get the desired results with the following, > - -- rather crude, proofs: > > ?-non-terminating : ? {A} ? ? (? {A} ??) > ?-non-terminating (now a e) = inj??inj? (sym e) > ?-non-terminating (later p e) with inj?-injective e > ?-non-terminating (later p e) | refl = ?-non-terminating p > > ?-not-now : ? {A} x ? ? (? {A} ~ return x) > ?-not-now x p with p .step > ?-not-now x p | () > > > On 29/03/2019 19:40, Jesper Cockx wrote: > > Hi all, > > > > As an experiment with cubical agda, I was trying to define a > > quotiented version of the Delay monad as a higher inductive type. > > I'm using this definition: > > > > data Delay (A : Set ?) : Set ? > > > > record Delay? (A : Set ?) : Set ? where coinductive field force : > > Delay A > > > > open Delay? public > > > > data Delay A where now : A ? Delay A later : Delay? A ? Delay A > > step : (x : Delay? A) ? later x ? x .force > > > > I managed to implement some basic functions on it but I got stuck > > on trying to prove the looping computation 'never' does not in fact > > evaluate to any value. My code is available here: > > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f > 08e23630221cc3d9 > > > > > > I looked at the problem together with Christian Sattler and we are not e > ven > > sure it is actually provable. Does anyone have an idea how to > > proceed? Or has someone already experimented with coinductive types > > in cubical and encountered similar problems? (I looked at the paper > > "Partiality revisited" by Thorsten, Nisse and Nicolai but they use > > a very different definition of the partiality monad.) > > > > Cheers, Jesper > > > > > > _______________________________________________ Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > -----BEGIN PGP SIGNATURE----- > > iQIzBAEBCgAdFiEEMnUmuprSDishxVMiatBsEc2xMm4FAlyjJ+UACgkQatBsEc2x > Mm7ssRAApnhxYylfbxU0f6vQKm0y1MSL1kZ6jleKdpGDcYQObaACGVoIQ3BBoOw1 > XqEiInf+uegeNIsWU9D0xOhTFrpn9b4eaDWgeZYuivc4KcUr4QjtrFlT4D/3wLHq > UlApjDmrcIrIgF4IR1lqn7gblAd8JES4uIwb5nGfbQXnp/sT0Ewv39Ap+0hIKMsf > S5g1rrzARzsPWkQC8Rx3pUZTUCMA7TB7MPDm9AiKYf70QC3vrmQPIAOt1EfMdwQW > cJfxgCV6Ayo0nmhAXXLq92+JZCjavdaeS0/o56MWCvLn3tS+/U0mUzBfGXG6Cevg > gsbFWdtmpPLXvt79wC93wB+h/uZ5vcKkdmsVKNKnlA46xOigv3nbWYkWymJ6/Xnf > jI7jhWMZxCQZEvzWVC9IgYA17M/uUIBe6tx3F4WP3o49OMxX9qMVdBhIwRsJ4nIn > LkSQPAbTob0XNYEDFfaow9h2usOqXC1rj5TJtBYr7aiK1qgmpeXWYw6L5P/vSN7i > bGYl3PqtjPHIgtL14Xin2bvihSuMcYwd3pfoTHZ5Eb1ORJ2BipUIhlj+jBfsEmU5 > YGRZB7bovnHldYAY4iiX5SvafgJUoTySieVcYiuHxc4tQs1NZSLOUNok88B5HnK1 > KEzghZe+tGi2weP7JyuUuQ9iBH7NPlyswbPLQSHkklULk3pq7Ps= > =r8V9 > -----END PGP SIGNATURE----- > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Tue Apr 2 12:25:18 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 2 Apr 2019 10:25:18 +0000 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: Message-ID: <4713C05B-0395-4319-AB67-EFFB47089A6C@exmail.nottingham.ac.uk> From: Agda on behalf of Jesper Cockx Date: Tuesday, 2 April 2019 at 10:31 To: Henning Basold Cc: agda list Subject: Re: [Agda] Defining the Delay monad as a HIT in cubical agda The paper "Partiality, revisited" does achieve the goal of defining the proper 'quotiented' Delay monad but it uses a very different definition of the Delay monad and needs to introduce quite some infrastructure to make it work. However, the quotiented delay monad and the QIT definition are equivalent if you assume countable choice. The problem with the quotiented delay monad is that you cannot even prove that it is a monad. I am wondering what exactly are the issues with the QIT definition of the partiality monad? Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolai.kraus at gmail.com Tue Apr 2 15:14:38 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Tue, 2 Apr 2019 14:14:38 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: Message-ID: Hi Jesper, I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. Cheers, Nicolai On 29/03/19 18:40, Jesper Cockx wrote: > Hi all, > > As an experiment with cubical agda, I was trying to define a > quotiented version of the Delay monad as a higher inductive type. I'm > using this definition: > > data Delay (A : Set ?) : Set ? > > record Delay? (A : Set ?) : Set ? where > coinductive > ? field > ??? force : Delay A > > open Delay? public > > data Delay A where > ? now?? : A ? Delay A > ? later : Delay? A ? Delay A > ? step? : (x : Delay? A) ? later x ? x .force > > I managed to implement some basic functions on it but I got stuck on > trying to prove the looping computation 'never' does not in fact > evaluate to any value. My code is available here: > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 > I looked at the problem together with Christian Sattler and we are not > even sure it is actually provable. Does anyone have an idea how to > proceed? Or has someone already experimented with coinductive types in > cubical and encountered similar problems? (I looked at the paper > "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a > very different definition of the partiality monad.) > > Cheers, > Jesper > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Tue Apr 2 16:08:52 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 2 Apr 2019 16:08:52 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: Message-ID: Hi Nicolai, Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. -- Jesper On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: > Hi Jesper, > > I find this construction very interesting since it's the first "cubical > higher co-inductive type" that I've seen! Unfortunately, I don't know how > these "CHCIT's" behave in Agda. > > If I had to guess, I would expect that you *cannot* distinguish now and > never, which would mean that your construction doesn't give you what you > wanted. The difference to the quotiented delay monad (or, for what it's > worth, the QIT/QIIT partiality monad) is that your construction inserts the > equations "coinductively" (usually, only the later-steps are coinductive). > > Thus, my guess is that Delay(Unit) could be contractible. One could try to > prove that every element is equal to 'now'. > > Cheers, > Nicolai > > > On 29/03/19 18:40, Jesper Cockx wrote: > > Hi all, > > As an experiment with cubical agda, I was trying to define a quotiented > version of the Delay monad as a higher inductive type. I'm using this > definition: > > data Delay (A : Set ?) : Set ? > > record Delay? (A : Set ?) : Set ? where > coinductive > field > force : Delay A > > open Delay? public > > data Delay A where > now : A ? Delay A > later : Delay? A ? Delay A > step : (x : Delay? A) ? later x ? x .force > > I managed to implement some basic functions on it but I got stuck on > trying to prove the looping computation 'never' does not in fact evaluate > to any value. My code is available here: > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 > I looked at the problem together with Christian Sattler and we are not even > sure it is actually provable. Does anyone have an idea how to proceed? Or > has someone already experimented with coinductive types in cubical and > encountered similar problems? (I looked at the paper "Partiality revisited" > by Thorsten, Nisse and Nicolai but they use a very different definition of > the partiality monad.) > > Cheers, > Jesper > > > _______________________________________________ > Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolai.kraus at gmail.com Tue Apr 2 22:05:50 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Tue, 2 Apr 2019 21:05:50 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: Message-ID: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? (Maybe, at this point, we shouldn't call it "Delay" :) -- Nicolai On 02/04/19 15:08, Jesper Cockx wrote: > Hi Nicolai, > > Yes, Christian and I suspected the same thing (that this definition of > the delay monad is actually a unit type), but I haven't managed to > prove that either because of some mysterious termination checker problem. > > I'm currently trying a different approach where I define the Delay > type mutually with the ? type so I can quotient by the relation > "normalize to the same value in a finite number of steps". I'll let > you know later if it works. > > -- Jesper > > On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus > wrote: > > Hi Jesper, > > I find this construction very interesting since it's the first > "cubical higher co-inductive type" that I've seen! Unfortunately, > I don't know how these "CHCIT's" behave in Agda. > > If I had to guess, I would expect that you *cannot* distinguish > now and never, which would mean that your construction doesn't > give you what you wanted. The difference to the quotiented delay > monad (or, for what it's worth, the QIT/QIIT partiality monad) is > that your construction inserts the equations "coinductively" > (usually, only the later-steps are coinductive). > > Thus, my guess is that Delay(Unit) could be contractible. One > could try to prove that every element is equal to 'now'. > > Cheers, > Nicolai > > > On 29/03/19 18:40, Jesper Cockx wrote: >> Hi all, >> >> As an experiment with cubical agda, I was trying to define a >> quotiented version of the Delay monad as a higher inductive type. >> I'm using this definition: >> >> data Delay (A : Set ?) : Set ? >> >> record Delay? (A : Set ?) : Set ? where >> coinductive >> field >> force : Delay A >> >> open Delay? public >> >> data Delay A where >> now?? : A ? Delay A >> later : Delay? A ? Delay A >> step? : (x : Delay? A) ? later x ? x .force >> >> I managed to implement some basic functions on it but I got stuck >> on trying to prove the looping computation 'never' does not in >> fact evaluate to any value. My code is available here: >> https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 >> I looked at the problem together with Christian Sattler and we >> are not even sure it is actually provable. Does anyone have an >> idea how to proceed? Or has someone already experimented with >> coinductive types in cubical and encountered similar problems? (I >> looked at the paper "Partiality revisited" by Thorsten, Nisse and >> Nicolai but they use a very different definition of the >> partiality monad.) >> >> Cheers, >> Jesper >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Tue Apr 2 22:23:56 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 2 Apr 2019 22:23:56 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Message-ID: Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. -- Jesper On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: > Interesting! So, in case Delay(Unit) does turn out to be contractible, we > might also expect that Delay(A) = A. This doesn't seem intuitive to me, but > it could still be true. Do you see a way to construct Delay(A) -> A? If > there is such a function, it should be quite canonical, and maybe it's > easier to write this function than to prove the contractibility. But if we > can't do this, and we also can't distinguish 'now' and 'never', then I have > no idea what Delay(A) actually is. Does any of the cubical models capture > such constructions? > (Maybe, at this point, we shouldn't call it "Delay" :) > -- Nicolai > > > On 02/04/19 15:08, Jesper Cockx wrote: > > Hi Nicolai, > > Yes, Christian and I suspected the same thing (that this definition of the > delay monad is actually a unit type), but I haven't managed to prove that > either because of some mysterious termination checker problem. > > I'm currently trying a different approach where I define the Delay type > mutually with the ? type so I can quotient by the relation "normalize to > the same value in a finite number of steps". I'll let you know later if it > works. > > -- Jesper > > On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus > wrote: > >> Hi Jesper, >> >> I find this construction very interesting since it's the first "cubical >> higher co-inductive type" that I've seen! Unfortunately, I don't know how >> these "CHCIT's" behave in Agda. >> >> If I had to guess, I would expect that you *cannot* distinguish now and >> never, which would mean that your construction doesn't give you what you >> wanted. The difference to the quotiented delay monad (or, for what it's >> worth, the QIT/QIIT partiality monad) is that your construction inserts the >> equations "coinductively" (usually, only the later-steps are coinductive). >> >> Thus, my guess is that Delay(Unit) could be contractible. One could try >> to prove that every element is equal to 'now'. >> >> Cheers, >> Nicolai >> >> >> On 29/03/19 18:40, Jesper Cockx wrote: >> >> Hi all, >> >> As an experiment with cubical agda, I was trying to define a quotiented >> version of the Delay monad as a higher inductive type. I'm using this >> definition: >> >> data Delay (A : Set ?) : Set ? >> >> record Delay? (A : Set ?) : Set ? where >> coinductive >> field >> force : Delay A >> >> open Delay? public >> >> data Delay A where >> now : A ? Delay A >> later : Delay? A ? Delay A >> step : (x : Delay? A) ? later x ? x .force >> >> I managed to implement some basic functions on it but I got stuck on >> trying to prove the looping computation 'never' does not in fact evaluate >> to any value. My code is available here: >> https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 >> I looked at the problem together with Christian Sattler and we are not even >> sure it is actually provable. Does anyone have an idea how to proceed? Or >> has someone already experimented with coinductive types in cubical and >> encountered similar problems? (I looked at the paper "Partiality revisited" >> by Thorsten, Nisse and Nicolai but they use a very different definition of >> the partiality monad.) >> >> Cheers, >> Jesper >> >> >> _______________________________________________ >> Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From tom at tomjack.co Tue Apr 2 23:10:12 2019 From: tom at tomjack.co (Tom Jack) Date: Tue, 2 Apr 2019 14:10:12 -0700 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Message-ID: We cannot have Delay A = A, because there is never : Delay ?. This is puzzling to me, indeed, because Delay looks like: now : A -> Delay A later : Delay' A -> Delay A step : later = force Normally, I'd expect to be able to 'do path induction' on (later, step), winding up with just `now`, so that Delay A = A. But this is absurd. Are there examples like this which don't involve a mutual coinductive type? On Tue, Apr 2, 2019 at 1:06 PM Nicolai Kraus wrote: > Interesting! So, in case Delay(Unit) does turn out to be contractible, we > might also expect that Delay(A) = A. This doesn't seem intuitive to me, but > it could still be true. Do you see a way to construct Delay(A) -> A? If > there is such a function, it should be quite canonical, and maybe it's > easier to write this function than to prove the contractibility. But if we > can't do this, and we also can't distinguish 'now' and 'never', then I have > no idea what Delay(A) actually is. Does any of the cubical models capture > such constructions? > (Maybe, at this point, we shouldn't call it "Delay" :) > -- Nicolai > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolai.kraus at gmail.com Tue Apr 2 23:11:13 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Tue, 2 Apr 2019 22:11:13 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Message-ID: <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> On 02/04/19 21:23, Jesper Cockx wrote: > Well, if `never` is equal to `now x`, then by transitivity `now x` is > equal to `now y` for any `x` and `y`, which would mean I found a very > complicated way to define the constant unit type :P Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. > About terminology: Nisse informed me that `Delay` is used for the > (non-truncated) coinductive type with two constructors `now` and > `later`, while the properly truncated variant where `later^n x` = `now > x` for any finite `n` is called the partiality monad. This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). > So my question is actually whether the partiality monad is definable > as a higher coinductive type with two point constructors `now` and > `later` plus some path constructor(s). > > The problem with defining such a higher coinductive type `D` is that > all attempts at proving two of its elements are *not* equal seem to fail: > > - Pattern matching on an equality between two constructors with an > absurd pattern () obviously doesn't work for higher inductive types. > - Defining a function `f : D -> Bool` or `D -> Set` which > distinguishes the two elements doesn't work either because both `Bool` > and `Set` are inductively defined, so `f` can only depend on a finite > prefix of its input (i.e. f must be continuous). `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition? Partiality(1). (btw, `Set` is not inductively defined?) > - Defining an indexed datatype `data P : D -> Set` that is empty at > one index but not at another seems to work, but then we get into > trouble when we actually want to prove that it is empty for that > particular index (this is not really surprising because indexed > datatypes can be explained with normal datatypes + the equality type, > so this is essentially the same as the first option). > > This exhausts my bag of tricks when it comes to proving two > constructor forms are not equal. This seems to be an essential problem > that would pop up any time one tries to mix coinduction with higher > constructors. It would be an interesting research topic to try and > define a suitable notion of "higher coinductive type" which does not > have this problem. Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) -- Nicolai > > -- Jesper > > On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus > wrote: > > Interesting! So, in case Delay(Unit) does turn out to be > contractible, we might also expect that Delay(A) = A. This doesn't > seem intuitive to me, but it could still be true. Do you see a way > to construct Delay(A) -> A? If there is such a function, it should > be quite canonical, and maybe it's easier to write this function > than to prove the contractibility. But if we can't do this, and we > also can't distinguish 'now' and 'never', then I have no idea what > Delay(A) actually is. Does any of the cubical models capture such > constructions? > (Maybe, at this point, we shouldn't call it "Delay" :) > -- Nicolai > > > On 02/04/19 15:08, Jesper Cockx wrote: >> Hi Nicolai, >> >> Yes, Christian and I suspected the same thing (that this >> definition of the delay monad is actually a unit type), but I >> haven't managed to prove that either because of some mysterious >> termination checker problem. >> >> I'm currently trying a different approach where I define the >> Delay type mutually with the ? type so I can quotient by the >> relation "normalize to the same value in a finite number of >> steps". I'll let you know later if it works. >> >> -- Jesper >> >> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus >> > wrote: >> >> Hi Jesper, >> >> I find this construction very interesting since it's the >> first "cubical higher co-inductive type" that I've seen! >> Unfortunately, I don't know how these "CHCIT's" behave in Agda. >> >> If I had to guess, I would expect that you *cannot* >> distinguish now and never, which would mean that your >> construction doesn't give you what you wanted. The difference >> to the quotiented delay monad (or, for what it's worth, the >> QIT/QIIT partiality monad) is that your construction inserts >> the equations "coinductively" (usually, only the later-steps >> are coinductive). >> >> Thus, my guess is that Delay(Unit) could be contractible. One >> could try to prove that every element is equal to 'now'. >> >> Cheers, >> Nicolai >> >> >> On 29/03/19 18:40, Jesper Cockx wrote: >>> Hi all, >>> >>> As an experiment with cubical agda, I was trying to define a >>> quotiented version of the Delay monad as a higher inductive >>> type. I'm using this definition: >>> >>> data Delay (A : Set ?) : Set ? >>> >>> record Delay? (A : Set ?) : Set ? where >>> coinductive >>> field >>> force : Delay A >>> >>> open Delay? public >>> >>> data Delay A where >>> now?? : A ? Delay A >>> later : Delay? A ? Delay A >>> step? : (x : Delay? A) ? later x ? x .force >>> >>> I managed to implement some basic functions on it but I got >>> stuck on trying to prove the looping computation 'never' >>> does not in fact evaluate to any value. My code is available >>> here: >>> https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 >>> I looked at the problem together with Christian Sattler and >>> we are not even sure it is actually provable. Does anyone >>> have an idea how to proceed? Or has someone already >>> experimented with coinductive types in cubical and >>> encountered similar problems? (I looked at the paper >>> "Partiality revisited" by Thorsten, Nisse and Nicolai but >>> they use a very different definition of the partiality monad.) >>> >>> Cheers, >>> Jesper >>> >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Tue Apr 2 23:13:01 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Tue, 2 Apr 2019 22:13:01 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Message-ID: <2e08be80-c5e7-46a7-9d41-82938d5e456f@cs.bham.ac.uk> I want to make some comments about the delay monad and partial functions in Agda, in Coq, and more generally in Martin-Loef type theory and dependent type theory. 1. Once you you quotient the delay monad, you are entering the realm of "lifting monads with respect to a dominance", which were studied extensively in 1980-2000. This is work by lots of people, including Pino Rosolini (supervised by Dana Scott), Martin Hyland, Paul Taylor, Alex Simpson, John Longley, and many more people. I think this work should not be neglected, not only because of credit reasons, but also because it has many interesting things to say that we don't need to invent again. 2. An attempt to bring the above work (1) to the realm of dependent type theory, and in particular to to univalent foundations, is developed by Cory Knapp and myself (CSL'2017). https://www.cs.bham.ac.uk/~mhe/papers/partial-elements-and-recursion.pdf 3. A practical test of (1) and (2) is given by Tom de Jong https://github.com/tomdjong/UniMath/blob/paper/paper.pdf What this does it to implement old ideas of Scott in the realm of dependent type theory, using the UniMath system, to (a) give an operational semantics to a programming language, called PCF, with non-terminating programs, (b) use a lifting monad in the good old sense of (1) above to give a denotational semantics for the language, and (c) prove in type theory that the operational and denotational semantics of the language coincide at ground types (which is known as "computational adequacy", since the 1970's, with the work of Gordon Plotkin). I read the above and hear myself preaching. I don't like preaching. But while I love the new ideas that are the result of dependent type theory, HoTT, univalent mathematics, cubical type theory, cubical Agda, and so on, I still think we should pay attention to the great things that were done not that long ago (even if it was in the previous millennium). We should not reinvent the wheel (although it may be fun to rediscover things on our own, I must say). Best, Martin On 02/04/2019 21:23, Jesper at sikanda.be wrote: > Well, if `never` is equal to `now x`, then by transitivity `now x` is > equal to `now y` for any `x` and `y`, which would mean I found a very > complicated way to define the constant unit type :P > > About terminology: Nisse informed me that `Delay` is used for the > (non-truncated) coinductive type with two constructors `now` and > `later`, while the properly truncated variant where `later^n x` = `now > x` for any finite `n` is called the partiality monad. So my question is > actually whether the partiality monad is definable as a higher > coinductive type with two point constructors `now` and `later` plus some > path constructor(s). > > The problem with defining such a higher coinductive type `D` is that all > attempts at proving two of its elements are *not* equal seem to fail: > > - Pattern matching on an equality between two constructors with an > absurd pattern () obviously doesn't work for higher inductive types. > - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes > the two elements doesn't work either because both `Bool` and `Set` are > inductively defined, so `f` can only depend on a finite prefix of its > input (i.e. f must be continuous). > - Defining an indexed datatype `data P : D -> Set` that is empty at one > index but not at another seems to work, but then we get into trouble > when we actually want to prove that it is empty for that particular > index (this is not really surprising because indexed datatypes can be > explained with normal datatypes + the equality type, so this is > essentially the same as the first option). > > This exhausts my bag of tricks when it comes to proving two constructor > forms are not equal. This seems to be an essential problem that would > pop up any time one tries to mix coinduction with higher constructors. > It would be an interesting research topic to try and define a suitable > notion of "higher coinductive type" which does not have this problem. > > -- Jesper > > On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus > wrote: > > Interesting! So, in case Delay(Unit) does turn out to be > contractible, we might also expect that Delay(A) = A. This doesn't > seem intuitive to me, but it could still be true. Do you see a way > to construct Delay(A) -> A? If there is such a function, it should > be quite canonical, and maybe it's easier to write this function > than to prove the contractibility. But if we can't do this, and we > also can't distinguish 'now' and 'never', then I have no idea what > Delay(A) actually is. Does any of the cubical models capture such > constructions? > (Maybe, at this point, we shouldn't call it "Delay" :) > -- Nicolai > > > On 02/04/19 15:08, Jesper Cockx wrote: >> Hi Nicolai, >> >> Yes, Christian and I suspected the same thing (that this >> definition of the delay monad is actually a unit type), but I >> haven't managed to prove that either because of some mysterious >> termination checker problem. >> >> I'm currently trying a different approach where I define the Delay >> type mutually with the ? type so I can quotient by the relation >> "normalize to the same value in a finite number of steps". I'll >> let you know later if it works. >> >> -- Jesper >> >> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus >> > wrote: >> >> Hi Jesper, >> >> I find this construction very interesting since it's the first >> "cubical higher co-inductive type" that I've seen! >> Unfortunately, I don't know how these "CHCIT's" behave in Agda. >> >> If I had to guess, I would expect that you *cannot* >> distinguish now and never, which would mean that your >> construction doesn't give you what you wanted. The difference >> to the quotiented delay monad (or, for what it's worth, the >> QIT/QIIT partiality monad) is that your construction inserts >> the equations "coinductively" (usually, only the later-steps >> are coinductive). >> >> Thus, my guess is that Delay(Unit) could be contractible. One >> could try to prove that every element is equal to 'now'. >> >> Cheers, >> Nicolai >> >> >> On 29/03/19 18:40, Jesper Cockx wrote: >>> Hi all, >>> >>> As an experiment with cubical agda, I was trying to define a >>> quotiented version of the Delay monad as a higher inductive >>> type. I'm using this definition: >>> >>> data Delay (A : Set ?) : Set ? >>> >>> record Delay? (A : Set ?) : Set ? where >>> coinductive >>> field >>> force : Delay A >>> >>> open Delay? public >>> >>> data Delay A where >>> now : A ? Delay A >>> later : Delay? A ? Delay A >>> step : (x : Delay? A) ? later x ? x .force >>> >>> I managed to implement some basic functions on it but I got >>> stuck on trying to prove the looping computation 'never' does >>> not in fact evaluate to any value. My code is available here: >>> https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 >>> I looked at the problem together with Christian Sattler and >>> we are not even sure it is actually provable. Does anyone >>> have an idea how to proceed? Or has someone already >>> experimented with coinductive types in cubical and >>> encountered similar problems? (I looked at the paper >>> "Partiality revisited" by Thorsten, Nisse and Nicolai but >>> they use a very different definition of the partiality monad.) >>> >>> Cheers, >>> Jesper >>> >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From nicolai.kraus at gmail.com Tue Apr 2 23:17:21 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Tue, 2 Apr 2019 22:17:21 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Message-ID: On 02/04/19 22:10, Tom Jack wrote: > Normally, I'd expect to be able to 'do path induction' on (later, > step), winding up with just `now`, so that Delay A = A. But this is > absurd. I think this is what would happen if we were talking about induction instead of coinduction. My intuition is that coinduction causes all the "chains" to be "one-point-compactified" with the same point `never`. By "chain", I mean now(a) = later(now(a)) = later(later(now(a))) = ... -- Nicolai > > Are there examples like this which don't involve a mutual coinductive > type? > > On Tue, Apr 2, 2019 at 1:06 PM Nicolai Kraus > wrote: > > Interesting! So, in case Delay(Unit) does turn out to be > contractible, we might also expect that Delay(A) = A. This doesn't > seem intuitive to me, but it could still be true. Do you see a way > to construct Delay(A) -> A? If there is such a function, it should > be quite canonical, and maybe it's easier to write this function > than to prove the contractibility. But if we can't do this, and we > also can't distinguish 'now' and 'never', then I have no idea what > Delay(A) actually is. Does any of the cubical models capture such > constructions? > (Maybe, at this point, we shouldn't call it "Delay" :) > -- Nicolai > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed Apr 3 00:57:48 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 2 Apr 2019 22:57:48 +0000 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> Message-ID: <64D31B7E-A767-4F5E-89C3-DBBE55DAD444@nottingham.ac.uk> Our presentation using chains as functions from Nat isn?t really so different to the coinductive definition. The delay monad can be equivalently described as functions f : Nat -> Maybe(A) with the property that if f n = just a -> f(n+1) = just a. Hence the definition in our paper corresponds to the delay monad of they are flat, i.e. if we don?t iterate the lub constructor and use only bottom or eta a. Hence if you want to model the partiality monad using a coninductive type you should allow to iterate it that is use something like Delay^n(A) and quotient this e.g. by collapsing layers. Our definition of the partiality monad seems quite natural because it is simply the free omega-CPO over a given set. However, maybe one can define this coniductively instead of using functions to describe chains. Thorsten From: Agda on behalf of Nicolai Kraus Date: Tuesday, 2 April 2019 at 22:17 To: Tom Jack Cc: agda list Subject: Re: [Agda] Defining the Delay monad as a HIT in cubical agda On 02/04/19 22:10, Tom Jack wrote: Normally, I'd expect to be able to 'do path induction' on (later, step), winding up with just `now`, so that Delay A = A. But this is absurd. I think this is what would happen if we were talking about induction instead of coinduction. My intuition is that coinduction causes all the "chains" to be "one-point-compactified" with the same point `never`. By "chain", I mean now(a) = later(now(a)) = later(later(now(a))) = ... -- Nicolai Are there examples like this which don't involve a mutual coinductive type? On Tue, Apr 2, 2019 at 1:06 PM Nicolai Kraus > wrote: Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? (Maybe, at this point, we shouldn't call it "Delay" :) -- Nicolai This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolai.kraus at gmail.com Wed Apr 3 00:58:07 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Tue, 2 Apr 2019 23:58:07 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <2e08be80-c5e7-46a7-9d41-82938d5e456f@cs.bham.ac.uk> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <2e08be80-c5e7-46a7-9d41-82938d5e456f@cs.bham.ac.uk> Message-ID: <5910d8a0-4198-9d45-91c1-1b7f4b5e207d@gmail.com> Hi Martin, thanks for the pointers! Of course, we should keep all of this great work in mind. Best wishes, Nicolai On 02/04/19 22:13, Martin Escardo wrote: > > I want to make some comments about the delay monad and partial > functions in Agda, in Coq, and more generally in Martin-Loef type > theory and dependent type theory. > > ?1. Once you you quotient the delay monad, you are entering the realm > ??? of "lifting monads with respect to a dominance", which were > ??? studied extensively in 1980-2000. > > ??? This is work by lots of people, including Pino Rosolini > ??? (supervised by Dana Scott), Martin Hyland, Paul Taylor, Alex > ??? Simpson, John Longley, and many more people. I think this work > ??? should not be neglected, not only because of credit reasons, but > ??? also because it has many interesting things to say that we don't > ??? need to invent again. > > ?2. An attempt to bring the above work (1) to the realm of dependent > ??? type theory, and in particular to to univalent foundations, is > ??? developed by Cory Knapp and myself (CSL'2017). > > https://www.cs.bham.ac.uk/~mhe/papers/partial-elements-and-recursion.pdf > > ?3. A practical test of (1) and (2) is given by Tom de Jong > ??? https://github.com/tomdjong/UniMath/blob/paper/paper.pdf > > ??? What this does it to implement old ideas of Scott in the realm of > ??? dependent type theory, using the UniMath system, to (a) give an > ??? operational semantics to a programming language, called PCF, with > ??? non-terminating programs, (b) use a lifting monad in the good old > ??? sense of (1) above to give a denotational semantics for the > ??? language, and (c) prove in type theory that the operational and > ??? denotational semantics of the language coincide at ground types > ??? (which is known as "computational adequacy", since the 1970's, > ??? with the work of Gordon Plotkin). > > I read the above and hear myself preaching. I don't like > preaching. But while I love the new ideas that are the result of > dependent type theory, HoTT, univalent mathematics, cubical type > theory, cubical Agda, and so on, I still think we should pay attention > to the great things that were done not that long ago (even if it was > in the previous millennium). We should not reinvent the wheel > (although it may be fun to rediscover things on our own, I must say). > > Best, > Martin > > > > On 02/04/2019 21:23, Jesper at sikanda.be wrote: >> Well, if `never` is equal to `now x`, then by transitivity `now x` is >> equal to `now y` for any `x` and `y`, which would mean I found a very >> complicated way to define the constant unit type :P >> >> About terminology: Nisse informed me that `Delay` is used for the >> (non-truncated) coinductive type with two constructors `now` and >> `later`, while the properly truncated variant where `later^n x` = `now >> x` for any finite `n` is called the partiality monad. So my question is >> actually whether the partiality monad is definable as a higher >> coinductive type with two point constructors `now` and `later` plus some >> path constructor(s). >> >> The problem with defining such a higher coinductive type `D` is that all >> attempts at proving two of its elements are *not* equal seem to fail: >> >> - Pattern matching on an equality between two constructors with an >> absurd pattern () obviously doesn't work for higher inductive types. >> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes >> the two elements doesn't work either because both `Bool` and `Set` are >> inductively defined, so `f` can only depend on a finite prefix of its >> input (i.e. f must be continuous). >> - Defining an indexed datatype `data P : D -> Set` that is empty at one >> index but not at another seems to work, but then we get into trouble >> when we actually want to prove that it is empty for that particular >> index (this is not really surprising because indexed datatypes can be >> explained with normal datatypes + the equality type, so this is >> essentially the same as the first option). >> >> This exhausts my bag of tricks when it comes to proving two constructor >> forms are not equal. This seems to be an essential problem that would >> pop up any time one tries to mix coinduction with higher constructors. >> It would be an interesting research topic to try and define a suitable >> notion of "higher coinductive type" which does not have this problem. >> >> -- Jesper >> >> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus > > wrote: >> >> ??? Interesting! So, in case Delay(Unit) does turn out to be >> ??? contractible, we might also expect that Delay(A) = A. This doesn't >> ??? seem intuitive to me, but it could still be true. Do you see a way >> ??? to construct Delay(A) -> A? If there is such a function, it should >> ??? be quite canonical, and maybe it's easier to write this function >> ??? than to prove the contractibility. But if we can't do this, and we >> ??? also can't distinguish 'now' and 'never', then I have no idea what >> ??? Delay(A) actually is. Does any of the cubical models capture such >> ??? constructions? >> ??? (Maybe, at this point, we shouldn't call it "Delay" :) >> ??? -- Nicolai >> >> >> ??? On 02/04/19 15:08, Jesper Cockx wrote: >>> ??? Hi Nicolai, >>> >>> ??? Yes, Christian and I suspected the same thing (that this >>> ??? definition of the delay monad is actually a unit type), but I >>> ??? haven't managed to prove that either because of some mysterious >>> ??? termination checker problem. >>> >>> ??? I'm currently trying a different approach where I define the Delay >>> ??? type mutually with the ? type so I can quotient by the relation >>> ??? "normalize to the same value in a finite number of steps". I'll >>> ??? let you know later if it works. >>> >>> ??? -- Jesper >>> >>> ??? On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus >>> ??? > wrote: >>> >>> ??????? Hi Jesper, >>> >>> ??????? I find this construction very interesting since it's the first >>> ??????? "cubical higher co-inductive type" that I've seen! >>> ??????? Unfortunately, I don't know how these "CHCIT's" behave in Agda. >>> >>> ??????? If I had to guess, I would expect that you *cannot* >>> ??????? distinguish now and never, which would mean that your >>> ??????? construction doesn't give you what you wanted. The difference >>> ??????? to the quotiented delay monad (or, for what it's worth, the >>> ??????? QIT/QIIT partiality monad) is that your construction inserts >>> ??????? the equations "coinductively" (usually, only the later-steps >>> ??????? are coinductive). >>> >>> ??????? Thus, my guess is that Delay(Unit) could be contractible. One >>> ??????? could try to prove that every element is equal to 'now'. >>> >>> ??????? Cheers, >>> ??????? Nicolai >>> >>> >>> ??????? On 29/03/19 18:40, Jesper Cockx wrote: >>>> ??????? Hi all, >>>> >>>> ??????? As an experiment with cubical agda, I was trying to define a >>>> ??????? quotiented version of the Delay monad as a higher inductive >>>> ??????? type. I'm using this definition: >>>> >>>> ??????? data Delay (A : Set ?) : Set ? >>>> >>>> ??????? record Delay? (A : Set ?) : Set ? where >>>> ??????? coinductive >>>> ??????? field >>>> ??????? force : Delay A >>>> >>>> ??????? open Delay? public >>>> >>>> ??????? data Delay A where >>>> ??????? now?? : A ? Delay A >>>> ??????? later : Delay? A ? Delay A >>>> ??????? step? : (x : Delay? A) ? later x ? x .force >>>> >>>> ??????? I managed to implement some basic functions on it but I got >>>> ??????? stuck on trying to prove the looping computation 'never' does >>>> ??????? not in fact evaluate to any value. My code is available here: >>>> https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 >>>> ??????? I looked at the problem together with Christian Sattler and >>>> ??????? we are not even sure it is actually provable. Does anyone >>>> ??????? have an idea how to proceed? Or has someone already >>>> ??????? experimented with coinductive types in cubical and >>>> ??????? encountered similar problems? (I looked at the paper >>>> ??????? "Partiality revisited" by Thorsten, Nisse and Nicolai but >>>> ??????? they use a very different definition of the partiality monad.) >>>> >>>> ??????? Cheers, >>>> ??????? Jesper >>>> >>>> >>>> ??????? _______________________________________________ >>>> ??????? Agda mailing list >>>> ??????? Agda at lists.chalmers.se >>>> ??????? https://lists.chalmers.se/mailman/listinfo/agda >>> >>> ??????? _______________________________________________ >>> ??????? Agda mailing list >>> ??????? Agda at lists.chalmers.se >>> ??????? https://lists.chalmers.se/mailman/listinfo/agda >>> >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > -- > Martin Escardo > http://www.cs.bham.ac.uk/~mhe From Graham.Hutton at nottingham.ac.uk Wed Apr 3 11:35:42 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Wed, 3 Apr 2019 09:35:42 +0000 Subject: [Agda] MPC 2019 final call for papers - submissions due 3rd May Message-ID: ====================================================================== *** FINAL CALL FOR PAPERS -- MPC 2019 *** 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== TIMELINE: Abstract submission 26th April 2019 Paper submission 3rd May 2019 Author notification 14th June 2019 Camera ready copy 12th July 2019 Conference 7-9 October 2019 KEYNOTE SPEAKERS: Assia Mahboubi INRIA, France Annabelle McIver Macquarie University, Australia BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). SCOPE: MPC seeks original papers on mathematical methods and tools put to use in program construction. Topics of interest range from algorithmics to support for program construction in programming languages and systems. Typical areas include type systems, program analysis and transformation, programming language semantics, security, and program logics. The notion of a 'program' is interpreted broadly, ranging from algorithms to hardware. Theoretical contributions are welcome, provided that their relevance to program construction is clear. Reports on applications are welcome, provided that their mathematical basis is evident. We also encourage the submission of 'programming pearls' that present elegant and instructive examples of the mathematics of program construction. SUBMISSION: Submission is in two stages. Abstracts (plain text, maximum 250 words) must be submitted by 26th April 2019. Full papers (pdf, formatted using the llncs.sty style file for LaTex) must be submitted by 3rd May 2019. There is no prescribed page limit, but authors should strive for brevity. Both abstracts and papers will be submitted using EasyChair. Papers must present previously unpublished work, and not be submitted concurrently to any other publication venue. Submissions will be evaluated by the program committee according to their relevance, correctness, significance, originality, and clarity. Each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. Accepted papers must be presented in person at the conference by one of the authors. The proceedings of MPC 2019 will be published in the Lecture Notes in Computer Science (LNCS) series, as with all previous instances of the conference. Authors of accepted papers will be expected to transfer copyright to Springer for this purpose. After the conference, authors of the best papers from MPC 2019 and MPC 2015 will be invited to submit revised versions to a special issue of Science of Computer Programming (SCP). For any queries about submission please contact the program chair, Graham Hutton . PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK CONFERENE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISERS: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From nad at cse.gu.se Wed Apr 3 13:58:33 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 3 Apr 2019 13:58:33 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <4713C05B-0395-4319-AB67-EFFB47089A6C@exmail.nottingham.ac.uk> References: <4713C05B-0395-4319-AB67-EFFB47089A6C@exmail.nottingham.ac.uk> Message-ID: <82bdca62-2edf-14f1-62dc-b6bed98de34b@cse.gu.se> On 02/04/2019 12.25, Thorsten Altenkirch wrote: > The problem with the quotiented delay monad is that you cannot even > prove that it is a monad. Has this been proved now? -- /NAD From Thorsten.Altenkirch at nottingham.ac.uk Wed Apr 3 15:56:27 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 3 Apr 2019 13:56:27 +0000 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <82bdca62-2edf-14f1-62dc-b6bed98de34b@cse.gu.se> References: <4713C05B-0395-4319-AB67-EFFB47089A6C@exmail.nottingham.ac.uk> <82bdca62-2edf-14f1-62dc-b6bed98de34b@cse.gu.se> Message-ID: <48E94C39-1D3F-4AF0-BD5A-0786CA621C3D@nottingham.ac.uk> I correct the statement: The problem with the quotiented delay monad is that *I* cannot even prove that it is a monad. ?On 03/04/2019, 12:59, "Agda on behalf of Nils Anders Danielsson" wrote: On 02/04/2019 12.25, Thorsten Altenkirch wrote: > The problem with the quotiented delay monad is that you cannot even > prove that it is a monad. Has this been proved now? -- /NAD _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From mechvel at botik.ru Sat Apr 6 03:52:19 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Sat, 06 Apr 2019 04:52:19 +0300 Subject: [Agda] `with' fail Message-ID: <1554515539.2398.9.camel@one.mechvel.pereslavl.ru> People, This is on Agda-2.6.0-candidate-II (ghc-8.6.3, Ubuntu Linux 18.04). I try to replace `case` with `with' in fr-noZeroDivisor : ? HasZeroDivisor frSemiring fr-noZeroDivisor (f , (g , f?0 , g?0 , fg=0)) = case frNoZeroDiv {f} {g} fg=0 of \ { (inj? f=0) ? f?0 f=0 ; (inj? g=0) ? g?0 g=0 } {- with frNoZeroDiv {f} {g} fg=0 ... | inj? f=0 = f?0 f=0 ... | inj? g=0 = g?0 g=0 -} `case' is type-checked fast. And `with' type-checks for one minute, and then I interrupt it. What can be the matter? Regards, ------ Sergei From sanzhiyan at gmail.com Mon Apr 8 20:01:54 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Mon, 8 Apr 2019 20:01:54 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> Message-ID: Here is a proof that "never" is equal to "now x", making use of path abstraction and copatterns. mutual never? : Delay? A never? .force = never never : Delay A never = later never? mutual never?now? : ? (x : A) ? never? ? delay (now x) never?now? x i .force = never?now x i never?now : ? (x : A) ? never ? now x never?now x i = step (never?now? x i) i Of course one still wonders what Delay really is. This definition is accepted because the corecursion goes through the coinductive projection ".force" and both "step" and application to"i" are considered guardedness preserving. On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: > > On 02/04/19 21:23, Jesper Cockx wrote: > > Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P > > > Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! > It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. > > About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. > > > This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). > > So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). > > The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: > > - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. > - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). > > > `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) > > - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). > > This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. > > > Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) > -- Nicolai > > > > -- Jesper > > On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: >> >> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? >> (Maybe, at this point, we shouldn't call it "Delay" :) >> -- Nicolai >> >> >> On 02/04/19 15:08, Jesper Cockx wrote: >> >> Hi Nicolai, >> >> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. >> >> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. >> >> -- Jesper >> >> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: >>> >>> Hi Jesper, >>> >>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. >>> >>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). >>> >>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. >>> >>> Cheers, >>> Nicolai >>> >>> >>> On 29/03/19 18:40, Jesper Cockx wrote: >>> >>> Hi all, >>> >>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: >>> >>> data Delay (A : Set ?) : Set ? >>> >>> record Delay? (A : Set ?) : Set ? where >>> coinductive >>> field >>> force : Delay A >>> >>> open Delay? public >>> >>> data Delay A where >>> now : A ? Delay A >>> later : Delay? A ? Delay A >>> step : (x : Delay? A) ? later x ? x .force >>> >>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) >>> >>> Cheers, >>> Jesper >>> >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> >> > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From nicolai.kraus at gmail.com Mon Apr 8 20:11:04 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Mon, 8 Apr 2019 19:11:04 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> Message-ID: Wow, thanks, Andrea! Can this proof be extended to show that Delay(A) is contractible? -- Nicolai On 08/04/19 19:01, Andrea Vezzosi wrote: > Here is a proof that "never" is equal to "now x", making use of path > abstraction and copatterns. > > mutual > never? : Delay? A > never? .force = never > > never : Delay A > never = later never? > > mutual > never?now? : ? (x : A) ? never? ? delay (now x) > never?now? x i .force = never?now x i > > never?now : ? (x : A) ? never ? now x > never?now x i = step (never?now? x i) i > > Of course one still wonders what Delay really is. > > This definition is accepted because the corecursion goes through the > coinductive projection ".force" and both "step" and application to"i" > are considered guardedness preserving. > > On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: >> On 02/04/19 21:23, Jesper Cockx wrote: >> >> Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P >> >> >> Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! >> It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. >> >> About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. >> >> >> This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). >> >> So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). >> >> The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: >> >> - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. >> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). >> >> >> `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) >> >> - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). >> >> This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. >> >> >> Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) >> -- Nicolai >> >> >> >> -- Jesper >> >> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: >>> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? >>> (Maybe, at this point, we shouldn't call it "Delay" :) >>> -- Nicolai >>> >>> >>> On 02/04/19 15:08, Jesper Cockx wrote: >>> >>> Hi Nicolai, >>> >>> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. >>> >>> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. >>> >>> -- Jesper >>> >>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: >>>> Hi Jesper, >>>> >>>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. >>>> >>>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). >>>> >>>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. >>>> >>>> Cheers, >>>> Nicolai >>>> >>>> >>>> On 29/03/19 18:40, Jesper Cockx wrote: >>>> >>>> Hi all, >>>> >>>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: >>>> >>>> data Delay (A : Set ?) : Set ? >>>> >>>> record Delay? (A : Set ?) : Set ? where >>>> coinductive >>>> field >>>> force : Delay A >>>> >>>> open Delay? public >>>> >>>> data Delay A where >>>> now : A ? Delay A >>>> later : Delay? A ? Delay A >>>> step : (x : Delay? A) ? later x ? x .force >>>> >>>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) >>>> >>>> Cheers, >>>> Jesper >>>> >>>> >>>> _______________________________________________ >>>> Agda mailing list >>>> Agda at lists.chalmers.se >>>> https://lists.chalmers.se/mailman/listinfo/agda >>>> >>>> >>>> _______________________________________________ >>>> Agda mailing list >>>> Agda at lists.chalmers.se >>>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda From sanzhiyan at gmail.com Mon Apr 8 20:34:38 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Mon, 8 Apr 2019 20:34:38 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> Message-ID: Oh, yeah, I hadn't thought about it, but indeed there's nothing special about "now" here. mutual never?? : ? (x : Delay? A) ? never? ? x never?? x i .force = never? (x .force) i never? : ? (x : Delay A) ? never ? x never? x i = step (never?? (delay x) i) i On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus wrote: > > Wow, thanks, Andrea! > Can this proof be extended to show that Delay(A) is contractible? > -- Nicolai > > On 08/04/19 19:01, Andrea Vezzosi wrote: > > Here is a proof that "never" is equal to "now x", making use of path > > abstraction and copatterns. > > > > mutual > > never? : Delay? A > > never? .force = never > > > > never : Delay A > > never = later never? > > > > mutual > > never?now? : ? (x : A) ? never? ? delay (now x) > > never?now? x i .force = never?now x i > > > > never?now : ? (x : A) ? never ? now x > > never?now x i = step (never?now? x i) i > > > > Of course one still wonders what Delay really is. > > > > This definition is accepted because the corecursion goes through the > > coinductive projection ".force" and both "step" and application to"i" > > are considered guardedness preserving. > > > > On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: > >> On 02/04/19 21:23, Jesper Cockx wrote: > >> > >> Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P > >> > >> > >> Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! > >> It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. > >> > >> About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. > >> > >> > >> This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). > >> > >> So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). > >> > >> The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: > >> > >> - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. > >> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). > >> > >> > >> `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) > >> > >> - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). > >> > >> This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. > >> > >> > >> Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) > >> -- Nicolai > >> > >> > >> > >> -- Jesper > >> > >> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: > >>> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? > >>> (Maybe, at this point, we shouldn't call it "Delay" :) > >>> -- Nicolai > >>> > >>> > >>> On 02/04/19 15:08, Jesper Cockx wrote: > >>> > >>> Hi Nicolai, > >>> > >>> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. > >>> > >>> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. > >>> > >>> -- Jesper > >>> > >>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: > >>>> Hi Jesper, > >>>> > >>>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. > >>>> > >>>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). > >>>> > >>>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. > >>>> > >>>> Cheers, > >>>> Nicolai > >>>> > >>>> > >>>> On 29/03/19 18:40, Jesper Cockx wrote: > >>>> > >>>> Hi all, > >>>> > >>>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: > >>>> > >>>> data Delay (A : Set ?) : Set ? > >>>> > >>>> record Delay? (A : Set ?) : Set ? where > >>>> coinductive > >>>> field > >>>> force : Delay A > >>>> > >>>> open Delay? public > >>>> > >>>> data Delay A where > >>>> now : A ? Delay A > >>>> later : Delay? A ? Delay A > >>>> step : (x : Delay? A) ? later x ? x .force > >>>> > >>>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) > >>>> > >>>> Cheers, > >>>> Jesper > >>>> > >>>> > >>>> _______________________________________________ > >>>> Agda mailing list > >>>> Agda at lists.chalmers.se > >>>> https://lists.chalmers.se/mailman/listinfo/agda > >>>> > >>>> > >>>> _______________________________________________ > >>>> Agda mailing list > >>>> Agda at lists.chalmers.se > >>>> https://lists.chalmers.se/mailman/listinfo/agda > >>> > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > From nicolai.kraus at gmail.com Mon Apr 8 20:38:54 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Mon, 8 Apr 2019 19:38:54 +0100 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> Message-ID: <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> Great!!? :) That means we know what this type is: Delay(A) = 1. It's not so clear (to me) though how we can justify these higher coinductive types. On 08/04/19 19:34, Andrea Vezzosi wrote: > Oh, yeah, I hadn't thought about it, but indeed there's nothing > special about "now" here. > > mutual > never?? : ? (x : Delay? A) ? never? ? x > never?? x i .force = never? (x .force) i > > never? : ? (x : Delay A) ? never ? x > never? x i = step (never?? (delay x) i) i > > > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus wrote: >> Wow, thanks, Andrea! >> Can this proof be extended to show that Delay(A) is contractible? >> -- Nicolai >> >> On 08/04/19 19:01, Andrea Vezzosi wrote: >>> Here is a proof that "never" is equal to "now x", making use of path >>> abstraction and copatterns. >>> >>> mutual >>> never? : Delay? A >>> never? .force = never >>> >>> never : Delay A >>> never = later never? >>> >>> mutual >>> never?now? : ? (x : A) ? never? ? delay (now x) >>> never?now? x i .force = never?now x i >>> >>> never?now : ? (x : A) ? never ? now x >>> never?now x i = step (never?now? x i) i >>> >>> Of course one still wonders what Delay really is. >>> >>> This definition is accepted because the corecursion goes through the >>> coinductive projection ".force" and both "step" and application to"i" >>> are considered guardedness preserving. >>> >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: >>>> On 02/04/19 21:23, Jesper Cockx wrote: >>>> >>>> Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P >>>> >>>> >>>> Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! >>>> It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. >>>> >>>> About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. >>>> >>>> >>>> This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). >>>> >>>> So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). >>>> >>>> The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: >>>> >>>> - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. >>>> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). >>>> >>>> >>>> `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) >>>> >>>> - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). >>>> >>>> This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. >>>> >>>> >>>> Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) >>>> -- Nicolai >>>> >>>> >>>> >>>> -- Jesper >>>> >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: >>>>> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) >>>>> -- Nicolai >>>>> >>>>> >>>>> On 02/04/19 15:08, Jesper Cockx wrote: >>>>> >>>>> Hi Nicolai, >>>>> >>>>> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. >>>>> >>>>> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. >>>>> >>>>> -- Jesper >>>>> >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: >>>>>> Hi Jesper, >>>>>> >>>>>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. >>>>>> >>>>>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). >>>>>> >>>>>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. >>>>>> >>>>>> Cheers, >>>>>> Nicolai >>>>>> >>>>>> >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: >>>>>> >>>>>> Hi all, >>>>>> >>>>>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: >>>>>> >>>>>> data Delay (A : Set ?) : Set ? >>>>>> >>>>>> record Delay? (A : Set ?) : Set ? where >>>>>> coinductive >>>>>> field >>>>>> force : Delay A >>>>>> >>>>>> open Delay? public >>>>>> >>>>>> data Delay A where >>>>>> now : A ? Delay A >>>>>> later : Delay? A ? Delay A >>>>>> step : (x : Delay? A) ? later x ? x .force >>>>>> >>>>>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) >>>>>> >>>>>> Cheers, >>>>>> Jesper >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Agda mailing list >>>>>> Agda at lists.chalmers.se >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Agda mailing list >>>>>> Agda at lists.chalmers.se >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >>>> _______________________________________________ >>>> Agda mailing list >>>> Agda at lists.chalmers.se >>>> https://lists.chalmers.se/mailman/listinfo/agda From sanzhiyan at gmail.com Tue Apr 9 10:08:46 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Tue, 9 Apr 2019 10:08:46 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> Message-ID: On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus wrote: > > Great!! :) > That means we know what this type is: Delay(A) = 1. > It's not so clear (to me) though how we can justify these higher > coinductive types. It seems that this example should make sense as a cubical set in the same style as the construction of HITs in CTT ? Just defined as a mixed inductive-coinductive type rather than purely inductive. https://arxiv.org/abs/1802.01170 > > On 08/04/19 19:34, Andrea Vezzosi wrote: > > Oh, yeah, I hadn't thought about it, but indeed there's nothing > > special about "now" here. > > > > mutual > > never?? : ? (x : Delay? A) ? never? ? x > > never?? x i .force = never? (x .force) i > > > > never? : ? (x : Delay A) ? never ? x > > never? x i = step (never?? (delay x) i) i > > > > > > > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus wrote: > >> Wow, thanks, Andrea! > >> Can this proof be extended to show that Delay(A) is contractible? > >> -- Nicolai > >> > >> On 08/04/19 19:01, Andrea Vezzosi wrote: > >>> Here is a proof that "never" is equal to "now x", making use of path > >>> abstraction and copatterns. > >>> > >>> mutual > >>> never? : Delay? A > >>> never? .force = never > >>> > >>> never : Delay A > >>> never = later never? > >>> > >>> mutual > >>> never?now? : ? (x : A) ? never? ? delay (now x) > >>> never?now? x i .force = never?now x i > >>> > >>> never?now : ? (x : A) ? never ? now x > >>> never?now x i = step (never?now? x i) i > >>> > >>> Of course one still wonders what Delay really is. > >>> > >>> This definition is accepted because the corecursion goes through the > >>> coinductive projection ".force" and both "step" and application to"i" > >>> are considered guardedness preserving. > >>> > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: > >>>> On 02/04/19 21:23, Jesper Cockx wrote: > >>>> > >>>> Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P > >>>> > >>>> > >>>> Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! > >>>> It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. > >>>> > >>>> About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. > >>>> > >>>> > >>>> This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). > >>>> > >>>> So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). > >>>> > >>>> The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: > >>>> > >>>> - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). > >>>> > >>>> > >>>> `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) > >>>> > >>>> - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). > >>>> > >>>> This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. > >>>> > >>>> > >>>> Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) > >>>> -- Nicolai > >>>> > >>>> > >>>> > >>>> -- Jesper > >>>> > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: > >>>>> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) > >>>>> -- Nicolai > >>>>> > >>>>> > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: > >>>>> > >>>>> Hi Nicolai, > >>>>> > >>>>> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. > >>>>> > >>>>> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. > >>>>> > >>>>> -- Jesper > >>>>> > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: > >>>>>> Hi Jesper, > >>>>>> > >>>>>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. > >>>>>> > >>>>>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). > >>>>>> > >>>>>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. > >>>>>> > >>>>>> Cheers, > >>>>>> Nicolai > >>>>>> > >>>>>> > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: > >>>>>> > >>>>>> Hi all, > >>>>>> > >>>>>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: > >>>>>> > >>>>>> data Delay (A : Set ?) : Set ? > >>>>>> > >>>>>> record Delay? (A : Set ?) : Set ? where > >>>>>> coinductive > >>>>>> field > >>>>>> force : Delay A > >>>>>> > >>>>>> open Delay? public > >>>>>> > >>>>>> data Delay A where > >>>>>> now : A ? Delay A > >>>>>> later : Delay? A ? Delay A > >>>>>> step : (x : Delay? A) ? later x ? x .force > >>>>>> > >>>>>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) > >>>>>> > >>>>>> Cheers, > >>>>>> Jesper > >>>>>> > >>>>>> > >>>>>> _______________________________________________ > >>>>>> Agda mailing list > >>>>>> Agda at lists.chalmers.se > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > >>>>>> > >>>>>> > >>>>>> _______________________________________________ > >>>>>> Agda mailing list > >>>>>> Agda at lists.chalmers.se > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > >>>> _______________________________________________ > >>>> Agda mailing list > >>>> Agda at lists.chalmers.se > >>>> https://lists.chalmers.se/mailman/listinfo/agda > From sanzhiyan at gmail.com Tue Apr 9 16:42:45 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Tue, 9 Apr 2019 16:42:45 +0200 Subject: [Agda] Identifying inefficiency In-Reply-To: <09be5ee3-ad66-8be5-abfb-2bcb2ce65f50@cs.bham.ac.uk> References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> <20190326164245.GP10807@ritchie.cas.mcmaster.ca> <09be5ee3-ad66-8be5-abfb-2bcb2ce65f50@cs.bham.ac.uk> Message-ID: I have found that efficiency problems with algebraic structures can be mitigated by disabling (definitional) eta rules for such record types and defining instances by copatterns. (Ulf gave a talk partly on this at the AIM in Leuven). I have just now pushed such a change for the isEquiv record used by the cubical primitives: https://github.com/agda/agda/commit/13d516f20d5cdf88e35349a2d8ddc52e1c5c2dde This will make it so an element of isEquiv defined by copatterns will only be definitionally equal to itself, so things get compared by name and arguments. This is similar to what happens with functions defined by standard pattern matching, when they cannot reduce. This led to a 16x speedup in one particularly bad example: https://github.com/agda/agda/commit/13d516f20d5cdf88e35349a2d8ddc52e1c5c2dde pathToEquiv is defined by copatterns, but now without eta for isEquiv the typechecker will not try to observe what happens at each projection. Then eta can still be proven propositionally by pattern matching on the record constructor. (Or in cubical one can define the corresponding path also by copatterns). Cheers, Andrea On Tue, Mar 26, 2019 at 5:50 PM Martin Escardo wrote: > > To be precise, I am not abstracting equivalence composition. I am > abstracting the proof that the composition of equivalences is an > equivalence. Martin > > On 26/03/2019 16:48, Martin Escardo wrote: > > It seems that indeed I am. > > > > Instead of functors, like you, I am composing equivalences. And I have > > the composition of three equivalences, twice, with the two possible > > associations. > > > > For the moment, I have solved this by making "abstract" the function > > that composes two equivalences. This brings down the time from 31s to 3s > > for the module under discussion. > > > > But I will look at the link you gave, as it does seem to be the same > > kind of situation. > > > > Thanks! > > > > Martin > > > > On 26/03/2019 16:42, kahl at cas.mcmaster.ca wrote: > >> On Tue, Mar 26, 2019 at 03:33:11PM +0000, Martin Escardo wrote: > >>> (I tried supplying all the implicit arguments to the RHS's, but the 30s > >>> time remains the same. At the holes, the types of the subterms of the > >>> terms that I want to fill the holes with is known, so I am not sure what > >>> is going on. But I guess this is a different question from the one in > >>> this thread.) > >> > >> Perhaps you are in the kind of situation that I frequently encounter, > >> see https://github.com/agda/agda/issues/1625 . > >> > >> I haven't tried Andrea's patch at > >> > >> https://github.com/agda/agda/issues/1625#issuecomment-132196576 > >> > >> in a while, but it worked wonders for some developments that would > >> otherwise have been impossible to typecheck. > >> > >> > >> Wolfram > >> > > > > -- > Martin Escardo > http://www.cs.bham.ac.uk/~mhe > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From m.escardo at cs.bham.ac.uk Tue Apr 9 18:38:27 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Tue, 9 Apr 2019 17:38:27 +0100 Subject: [Agda] Identifying inefficiency In-Reply-To: References: <59f86547-860a-4afb-f277-cfbaa342a8a6@cs.bham.ac.uk> <20190326164245.GP10807@ritchie.cas.mcmaster.ca> <09be5ee3-ad66-8be5-abfb-2bcb2ce65f50@cs.bham.ac.uk> Message-ID: Thanks for sharing this, which should be very useful. However, I think at some point a more principled solution will be needed. I am now struggling with time issues dealing with "Sigma". Very often eta for Sigma is really useful to have to get short proofs. But also very often I enter a time black hole, and while I think I have enough experience to deal with it, I end up spending more time "optimizing" the proof than coming up with the mathematical meat of a proof. I don't have a specific proposal, but here is a remark regarding "helping Agda". Very often, mathematicians, when writing papers or books, give hints to the reader, and sometimes these hints are not needed, but they do help the reader to understand the material more quickly. For example, a mathematician when writing the definition of a homomorphism as f(x + y) = f x + f y may quickly add that "addition on the left refers to the group A, whereas addition on the right it refers to the group B". Similarly, it should be useful to have all sorts of hints to help Agda with (fast) type checking. The idea would be that we write Agda definitions just as we do now, but we may add, before or after writing a term, annotations indicating what should (not) be attempted when trying to type check it, how to resolve ambiguities, how much to (not) expand definitional equalities. It is illuminating to read well written mathematical papers that actively help the readers to digest the material. Sometimes we will need to help Agda to digest our code, too, if we don't want to wait too long until it says "I understand now". And I bet that hints that help Agda to understand our code will also help human readers to understand it Best, Martin On 09/04/2019 15:42, sanzhiyan at gmail.com wrote: > I have found that efficiency problems with algebraic structures can be > mitigated by disabling (definitional) eta rules for such record types > and defining instances by copatterns. (Ulf gave a talk partly on this > at the AIM in Leuven). > > I have just now pushed such a change for the isEquiv record used by > the cubical primitives: > > https://github.com/agda/agda/commit/13d516f20d5cdf88e35349a2d8ddc52e1c5c2dde > > This will make it so an element of isEquiv defined by copatterns will > only be definitionally equal to itself, so things get compared by name > and arguments. > This is similar to what happens with functions defined by standard > pattern matching, when they cannot reduce. > > This led to a 16x speedup in one particularly bad example: > > https://github.com/agda/agda/commit/13d516f20d5cdf88e35349a2d8ddc52e1c5c2dde > > pathToEquiv is defined by copatterns, but now without eta for isEquiv > the typechecker will not try to observe what happens at each > projection. > > Then eta can still be proven propositionally by pattern matching on > the record constructor. > (Or in cubical one can define the corresponding path also by copatterns). > > Cheers, > Andrea > > > On Tue, Mar 26, 2019 at 5:50 PM Martin Escardo wrote: >> >> To be precise, I am not abstracting equivalence composition. I am >> abstracting the proof that the composition of equivalences is an >> equivalence. Martin >> >> On 26/03/2019 16:48, Martin Escardo wrote: >>> It seems that indeed I am. >>> >>> Instead of functors, like you, I am composing equivalences. And I have >>> the composition of three equivalences, twice, with the two possible >>> associations. >>> >>> For the moment, I have solved this by making "abstract" the function >>> that composes two equivalences. This brings down the time from 31s to 3s >>> for the module under discussion. >>> >>> But I will look at the link you gave, as it does seem to be the same >>> kind of situation. >>> >>> Thanks! >>> >>> Martin >>> >>> On 26/03/2019 16:42, kahl at cas.mcmaster.ca wrote: >>>> On Tue, Mar 26, 2019 at 03:33:11PM +0000, Martin Escardo wrote: >>>>> (I tried supplying all the implicit arguments to the RHS's, but the 30s >>>>> time remains the same. At the holes, the types of the subterms of the >>>>> terms that I want to fill the holes with is known, so I am not sure what >>>>> is going on. But I guess this is a different question from the one in >>>>> this thread.) >>>> >>>> Perhaps you are in the kind of situation that I frequently encounter, >>>> see https://github.com/agda/agda/issues/1625 . >>>> >>>> I haven't tried Andrea's patch at >>>> >>>> https://github.com/agda/agda/issues/1625#issuecomment-132196576 >>>> >>>> in a while, but it worked wonders for some developments that would >>>> otherwise have been impossible to typecheck. >>>> >>>> >>>> Wolfram >>>> >>> >> >> -- >> Martin Escardo >> http://www.cs.bham.ac.uk/~mhe >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From dan.doel at gmail.com Thu Apr 11 00:47:25 2019 From: dan.doel at gmail.com (Dan Doel) Date: Wed, 10 Apr 2019 18:47:25 -0400 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> Message-ID: It seems like what's going on here is kind of related to the somewhat odd behavior of coinduction in Agda in general, where every set of definitions involving coinduction is always ??. This means that there is a never _path_ that chains arbitrarily many `steps` together. But what you really want for things to work out is for the paths to be well founded, so that an `== now x` has to eventually reach the now. Is this fixed by first defining the coinductive Delay, and then inductively defining a HIT like: data Part (A : Set) : Set where include : Delay A -> Part A step : ? d -> include (later d) == include (force d) since the steps no longer tie through a coinductive type? On Tue, Apr 9, 2019 at 4:09 AM Andrea Vezzosi wrote: > On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus > wrote: > > > > Great!! :) > > That means we know what this type is: Delay(A) = 1. > > It's not so clear (to me) though how we can justify these higher > > coinductive types. > > It seems that this example should make sense as a cubical set in the > same style as the construction of HITs in CTT ? > Just defined as a mixed inductive-coinductive type rather than purely > inductive. > > https://arxiv.org/abs/1802.01170 > > > > > On 08/04/19 19:34, Andrea Vezzosi wrote: > > > Oh, yeah, I hadn't thought about it, but indeed there's nothing > > > special about "now" here. > > > > > > mutual > > > never?? : ? (x : Delay? A) ? never? ? x > > > never?? x i .force = never? (x .force) i > > > > > > never? : ? (x : Delay A) ? never ? x > > > never? x i = step (never?? (delay x) i) i > > > > > > > > > > > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus > wrote: > > >> Wow, thanks, Andrea! > > >> Can this proof be extended to show that Delay(A) is contractible? > > >> -- Nicolai > > >> > > >> On 08/04/19 19:01, Andrea Vezzosi wrote: > > >>> Here is a proof that "never" is equal to "now x", making use of path > > >>> abstraction and copatterns. > > >>> > > >>> mutual > > >>> never? : Delay? A > > >>> never? .force = never > > >>> > > >>> never : Delay A > > >>> never = later never? > > >>> > > >>> mutual > > >>> never?now? : ? (x : A) ? never? ? delay (now x) > > >>> never?now? x i .force = never?now x i > > >>> > > >>> never?now : ? (x : A) ? never ? now x > > >>> never?now x i = step (never?now? x i) i > > >>> > > >>> Of course one still wonders what Delay really is. > > >>> > > >>> This definition is accepted because the corecursion goes through the > > >>> coinductive projection ".force" and both "step" and application > to"i" > > >>> are considered guardedness preserving. > > >>> > > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >>>> On 02/04/19 21:23, Jesper Cockx wrote: > > >>>> > > >>>> Well, if `never` is equal to `now x`, then by transitivity `now x` > is equal to `now y` for any `x` and `y`, which would mean I found a very > complicated way to define the constant unit type :P > > >>>> > > >>>> > > >>>> Right... the conjecture should be Delay(A) = Unit. I made a silly > mistake before! > > >>>> It's possible that the theory doesn't allow us to prove Delay(A) = > 1, but I don't expect that we can show the negation of this. > > >>>> > > >>>> About terminology: Nisse informed me that `Delay` is used for the > (non-truncated) coinductive type with two constructors `now` and `later`, > while the properly truncated variant where `later^n x` = `now x` for any > finite `n` is called the partiality monad. > > >>>> > > >>>> > > >>>> This is also the terminology that I know. In addition, probably one > would want to call something "partiality monad" only if it actually is a > monad. The definition for this that I find most elegant is the one by Tarmo > and Niccol? (iirc, this definition ends up being equivalent to our > suggestion in the "Partiality revisited" paper). > > >>>> > > >>>> So my question is actually whether the partiality monad is > definable as a higher coinductive type with two point constructors `now` > and `later` plus some path constructor(s). > > >>>> > > >>>> The problem with defining such a higher coinductive type `D` is > that all attempts at proving two of its elements are *not* equal seem to > fail: > > >>>> > > >>>> - Pattern matching on an equality between two constructors with an > absurd pattern () obviously doesn't work for higher inductive types. > > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which > distinguishes the two elements doesn't work either because both `Bool` and > `Set` are inductively defined, so `f` can only depend on a finite prefix of > its input (i.e. f must be continuous). > > >>>> > > >>>> > > >>>> `f : D -> Bool` shouldn't work even with a correct partiality > monad, because it shouldn't be decidable whether an element is `never`. One > could replace `Bool` by the Sierpinski space, which is by definition > Partiality(1). (btw, `Set` is not inductively defined?) > > >>>> > > >>>> - Defining an indexed datatype `data P : D -> Set` that is empty at > one index but not at another seems to work, but then we get into trouble > when we actually want to prove that it is empty for that particular index > (this is not really surprising because indexed datatypes can be explained > with normal datatypes + the equality type, so this is essentially the same > as the first option). > > >>>> > > >>>> This exhausts my bag of tricks when it comes to proving two > constructor forms are not equal. This seems to be an essential problem that > would pop up any time one tries to mix coinduction with higher > constructors. It would be an interesting research topic to try and define a > suitable notion of "higher coinductive type" which does not have this > problem. > > >>>> > > >>>> > > >>>> Right, but I think we current have no idea what cubical Agda's > "higher coinductive types" are. It's interesting that Agda allows these, > but they could as well be inconsistent. (That's why I asked about models > before.) > > >>>> -- Nicolai > > >>>> > > >>>> > > >>>> > > >>>> -- Jesper > > >>>> > > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >>>>> Interesting! So, in case Delay(Unit) does turn out to be > contractible, we might also expect that Delay(A) = A. This doesn't seem > intuitive to me, but it could still be true. Do you see a way to construct > Delay(A) -> A? If there is such a function, it should be quite canonical, > and maybe it's easier to write this function than to prove the > contractibility. But if we can't do this, and we also can't distinguish > 'now' and 'never', then I have no idea what Delay(A) actually is. Does any > of the cubical models capture such constructions? > > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) > > >>>>> -- Nicolai > > >>>>> > > >>>>> > > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: > > >>>>> > > >>>>> Hi Nicolai, > > >>>>> > > >>>>> Yes, Christian and I suspected the same thing (that this > definition of the delay monad is actually a unit type), but I haven't > managed to prove that either because of some mysterious termination checker > problem. > > >>>>> > > >>>>> I'm currently trying a different approach where I define the Delay > type mutually with the ? type so I can quotient by the relation "normalize > to the same value in a finite number of steps". I'll let you know later if > it works. > > >>>>> > > >>>>> -- Jesper > > >>>>> > > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >>>>>> Hi Jesper, > > >>>>>> > > >>>>>> I find this construction very interesting since it's the first > "cubical higher co-inductive type" that I've seen! Unfortunately, I don't > know how these "CHCIT's" behave in Agda. > > >>>>>> > > >>>>>> If I had to guess, I would expect that you *cannot* distinguish > now and never, which would mean that your construction doesn't give you > what you wanted. The difference to the quotiented delay monad (or, for what > it's worth, the QIT/QIIT partiality monad) is that your construction > inserts the equations "coinductively" (usually, only the later-steps are > coinductive). > > >>>>>> > > >>>>>> Thus, my guess is that Delay(Unit) could be contractible. One > could try to prove that every element is equal to 'now'. > > >>>>>> > > >>>>>> Cheers, > > >>>>>> Nicolai > > >>>>>> > > >>>>>> > > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: > > >>>>>> > > >>>>>> Hi all, > > >>>>>> > > >>>>>> As an experiment with cubical agda, I was trying to define a > quotiented version of the Delay monad as a higher inductive type. I'm using > this definition: > > >>>>>> > > >>>>>> data Delay (A : Set ?) : Set ? > > >>>>>> > > >>>>>> record Delay? (A : Set ?) : Set ? where > > >>>>>> coinductive > > >>>>>> field > > >>>>>> force : Delay A > > >>>>>> > > >>>>>> open Delay? public > > >>>>>> > > >>>>>> data Delay A where > > >>>>>> now : A ? Delay A > > >>>>>> later : Delay? A ? Delay A > > >>>>>> step : (x : Delay? A) ? later x ? x .force > > >>>>>> > > >>>>>> I managed to implement some basic functions on it but I got stuck > on trying to prove the looping computation 'never' does not in fact > evaluate to any value. My code is available here: > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 > I looked at the problem together with Christian Sattler and we are not even > sure it is actually provable. Does anyone have an idea how to proceed? Or > has someone already experimented with coinductive types in cubical and > encountered similar problems? (I looked at the paper "Partiality revisited" > by Thorsten, Nisse and Nicolai but they use a very different definition of > the partiality monad.) > > >>>>>> > > >>>>>> Cheers, > > >>>>>> Jesper > > >>>>>> > > >>>>>> > > >>>>>> _______________________________________________ > > >>>>>> Agda mailing list > > >>>>>> Agda at lists.chalmers.se > > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > > >>>>>> > > >>>>>> > > >>>>>> _______________________________________________ > > >>>>>> Agda mailing list > > >>>>>> Agda at lists.chalmers.se > > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > > >>>> _______________________________________________ > > >>>> Agda mailing list > > >>>> Agda at lists.chalmers.se > > >>>> https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Thu Apr 11 01:01:14 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 11 Apr 2019 02:01:14 +0300 Subject: [Agda] `with' vs `case' Message-ID: <1554937274.2331.8.camel@one.mechvel.pereslavl.ru> Dear Agda team, Style guide of standard library writes for the code committers that it is better to use the `with' construct than case_of_. But (1) Earlier the team advised me to use case_of_ as possible. (2) I have a small application that adds a few items to standard library, and a certain function f in the end that type-checks in 5 seconds when f is written via case_of_ and its type check seems to loop infinitely when f is written via `with'. Currently the Style guide actually suggests to use `with' everywhere where it type-checks reasonably fast, and to use case_of_ in other cases. Let a function g from standard be written via `with' and be type-checked fast. May it occur that when it is used in application, it explodes the type checking as in the example (2) ? Is not it better to use case_of_ instead of `with' in standard library everywhere where it is type-checked? Thanks, ------ Sergei From dan.doel at gmail.com Thu Apr 11 01:04:50 2019 From: dan.doel at gmail.com (Dan Doel) Date: Wed, 10 Apr 2019 19:04:50 -0400 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> Message-ID: Actually, perhaps it isn't fair to say that it's an oddity in this case, because ?? is actually what we want for the lowest level, but not what we want for the path level, and it would be more odd for the fixed points to be swapped between levels. -- Dan On Wed, Apr 10, 2019 at 6:47 PM Dan Doel wrote: > It seems like what's going on here is kind of related to the somewhat > odd behavior of coinduction in Agda in general, where every set of > definitions involving coinduction is always ??. This means that there > is a never _path_ that chains arbitrarily many `steps` together. But > what you really want for things to work out is for the paths to be well > founded, so that an `== now x` has to eventually reach the now. > > Is this fixed by first defining the coinductive Delay, and then inductively > defining a HIT like: > > data Part (A : Set) : Set where > include : Delay A -> Part A > step : ? d -> include (later d) == include (force d) > > since the steps no longer tie through a coinductive type? > > On Tue, Apr 9, 2019 at 4:09 AM Andrea Vezzosi wrote: > >> On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus >> wrote: >> > >> > Great!! :) >> > That means we know what this type is: Delay(A) = 1. >> > It's not so clear (to me) though how we can justify these higher >> > coinductive types. >> >> It seems that this example should make sense as a cubical set in the >> same style as the construction of HITs in CTT ? >> Just defined as a mixed inductive-coinductive type rather than purely >> inductive. >> >> https://arxiv.org/abs/1802.01170 >> >> > >> > On 08/04/19 19:34, Andrea Vezzosi wrote: >> > > Oh, yeah, I hadn't thought about it, but indeed there's nothing >> > > special about "now" here. >> > > >> > > mutual >> > > never?? : ? (x : Delay? A) ? never? ? x >> > > never?? x i .force = never? (x .force) i >> > > >> > > never? : ? (x : Delay A) ? never ? x >> > > never? x i = step (never?? (delay x) i) i >> > > >> > > >> > > >> > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus >> wrote: >> > >> Wow, thanks, Andrea! >> > >> Can this proof be extended to show that Delay(A) is contractible? >> > >> -- Nicolai >> > >> >> > >> On 08/04/19 19:01, Andrea Vezzosi wrote: >> > >>> Here is a proof that "never" is equal to "now x", making use of path >> > >>> abstraction and copatterns. >> > >>> >> > >>> mutual >> > >>> never? : Delay? A >> > >>> never? .force = never >> > >>> >> > >>> never : Delay A >> > >>> never = later never? >> > >>> >> > >>> mutual >> > >>> never?now? : ? (x : A) ? never? ? delay (now x) >> > >>> never?now? x i .force = never?now x i >> > >>> >> > >>> never?now : ? (x : A) ? never ? now x >> > >>> never?now x i = step (never?now? x i) i >> > >>> >> > >>> Of course one still wonders what Delay really is. >> > >>> >> > >>> This definition is accepted because the corecursion goes through the >> > >>> coinductive projection ".force" and both "step" and application >> to"i" >> > >>> are considered guardedness preserving. >> > >>> >> > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus < >> nicolai.kraus at gmail.com> wrote: >> > >>>> On 02/04/19 21:23, Jesper Cockx wrote: >> > >>>> >> > >>>> Well, if `never` is equal to `now x`, then by transitivity `now x` >> is equal to `now y` for any `x` and `y`, which would mean I found a very >> complicated way to define the constant unit type :P >> > >>>> >> > >>>> >> > >>>> Right... the conjecture should be Delay(A) = Unit. I made a silly >> mistake before! >> > >>>> It's possible that the theory doesn't allow us to prove Delay(A) = >> 1, but I don't expect that we can show the negation of this. >> > >>>> >> > >>>> About terminology: Nisse informed me that `Delay` is used for the >> (non-truncated) coinductive type with two constructors `now` and `later`, >> while the properly truncated variant where `later^n x` = `now x` for any >> finite `n` is called the partiality monad. >> > >>>> >> > >>>> >> > >>>> This is also the terminology that I know. In addition, probably >> one would want to call something "partiality monad" only if it actually is >> a monad. The definition for this that I find most elegant is the one by >> Tarmo and Niccol? (iirc, this definition ends up being equivalent to our >> suggestion in the "Partiality revisited" paper). >> > >>>> >> > >>>> So my question is actually whether the partiality monad is >> definable as a higher coinductive type with two point constructors `now` >> and `later` plus some path constructor(s). >> > >>>> >> > >>>> The problem with defining such a higher coinductive type `D` is >> that all attempts at proving two of its elements are *not* equal seem to >> fail: >> > >>>> >> > >>>> - Pattern matching on an equality between two constructors with an >> absurd pattern () obviously doesn't work for higher inductive types. >> > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which >> distinguishes the two elements doesn't work either because both `Bool` and >> `Set` are inductively defined, so `f` can only depend on a finite prefix of >> its input (i.e. f must be continuous). >> > >>>> >> > >>>> >> > >>>> `f : D -> Bool` shouldn't work even with a correct partiality >> monad, because it shouldn't be decidable whether an element is `never`. One >> could replace `Bool` by the Sierpinski space, which is by definition >> Partiality(1). (btw, `Set` is not inductively defined?) >> > >>>> >> > >>>> - Defining an indexed datatype `data P : D -> Set` that is empty >> at one index but not at another seems to work, but then we get into trouble >> when we actually want to prove that it is empty for that particular index >> (this is not really surprising because indexed datatypes can be explained >> with normal datatypes + the equality type, so this is essentially the same >> as the first option). >> > >>>> >> > >>>> This exhausts my bag of tricks when it comes to proving two >> constructor forms are not equal. This seems to be an essential problem that >> would pop up any time one tries to mix coinduction with higher >> constructors. It would be an interesting research topic to try and define a >> suitable notion of "higher coinductive type" which does not have this >> problem. >> > >>>> >> > >>>> >> > >>>> Right, but I think we current have no idea what cubical Agda's >> "higher coinductive types" are. It's interesting that Agda allows these, >> but they could as well be inconsistent. (That's why I asked about models >> before.) >> > >>>> -- Nicolai >> > >>>> >> > >>>> >> > >>>> >> > >>>> -- Jesper >> > >>>> >> > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus < >> nicolai.kraus at gmail.com> wrote: >> > >>>>> Interesting! So, in case Delay(Unit) does turn out to be >> contractible, we might also expect that Delay(A) = A. This doesn't seem >> intuitive to me, but it could still be true. Do you see a way to construct >> Delay(A) -> A? If there is such a function, it should be quite canonical, >> and maybe it's easier to write this function than to prove the >> contractibility. But if we can't do this, and we also can't distinguish >> 'now' and 'never', then I have no idea what Delay(A) actually is. Does any >> of the cubical models capture such constructions? >> > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) >> > >>>>> -- Nicolai >> > >>>>> >> > >>>>> >> > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: >> > >>>>> >> > >>>>> Hi Nicolai, >> > >>>>> >> > >>>>> Yes, Christian and I suspected the same thing (that this >> definition of the delay monad is actually a unit type), but I haven't >> managed to prove that either because of some mysterious termination checker >> problem. >> > >>>>> >> > >>>>> I'm currently trying a different approach where I define the >> Delay type mutually with the ? type so I can quotient by the relation >> "normalize to the same value in a finite number of steps". I'll let you >> know later if it works. >> > >>>>> >> > >>>>> -- Jesper >> > >>>>> >> > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus < >> nicolai.kraus at gmail.com> wrote: >> > >>>>>> Hi Jesper, >> > >>>>>> >> > >>>>>> I find this construction very interesting since it's the first >> "cubical higher co-inductive type" that I've seen! Unfortunately, I don't >> know how these "CHCIT's" behave in Agda. >> > >>>>>> >> > >>>>>> If I had to guess, I would expect that you *cannot* distinguish >> now and never, which would mean that your construction doesn't give you >> what you wanted. The difference to the quotiented delay monad (or, for what >> it's worth, the QIT/QIIT partiality monad) is that your construction >> inserts the equations "coinductively" (usually, only the later-steps are >> coinductive). >> > >>>>>> >> > >>>>>> Thus, my guess is that Delay(Unit) could be contractible. One >> could try to prove that every element is equal to 'now'. >> > >>>>>> >> > >>>>>> Cheers, >> > >>>>>> Nicolai >> > >>>>>> >> > >>>>>> >> > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: >> > >>>>>> >> > >>>>>> Hi all, >> > >>>>>> >> > >>>>>> As an experiment with cubical agda, I was trying to define a >> quotiented version of the Delay monad as a higher inductive type. I'm using >> this definition: >> > >>>>>> >> > >>>>>> data Delay (A : Set ?) : Set ? >> > >>>>>> >> > >>>>>> record Delay? (A : Set ?) : Set ? where >> > >>>>>> coinductive >> > >>>>>> field >> > >>>>>> force : Delay A >> > >>>>>> >> > >>>>>> open Delay? public >> > >>>>>> >> > >>>>>> data Delay A where >> > >>>>>> now : A ? Delay A >> > >>>>>> later : Delay? A ? Delay A >> > >>>>>> step : (x : Delay? A) ? later x ? x .force >> > >>>>>> >> > >>>>>> I managed to implement some basic functions on it but I got >> stuck on trying to prove the looping computation 'never' does not in fact >> evaluate to any value. My code is available here: >> https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 >> I looked at the problem together with Christian Sattler and we are not even >> sure it is actually provable. Does anyone have an idea how to proceed? Or >> has someone already experimented with coinductive types in cubical and >> encountered similar problems? (I looked at the paper "Partiality revisited" >> by Thorsten, Nisse and Nicolai but they use a very different definition of >> the partiality monad.) >> > >>>>>> >> > >>>>>> Cheers, >> > >>>>>> Jesper >> > >>>>>> >> > >>>>>> >> > >>>>>> _______________________________________________ >> > >>>>>> Agda mailing list >> > >>>>>> Agda at lists.chalmers.se >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >> > >>>>>> >> > >>>>>> >> > >>>>>> _______________________________________________ >> > >>>>>> Agda mailing list >> > >>>>>> Agda at lists.chalmers.se >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >> > >>>> _______________________________________________ >> > >>>> Agda mailing list >> > >>>> Agda at lists.chalmers.se >> > >>>> https://lists.chalmers.se/mailman/listinfo/agda >> > >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From jon at jonmsterling.com Thu Apr 11 01:16:05 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Wed, 10 Apr 2019 19:16:05 -0400 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> Message-ID: <68ef8632-b4e3-433c-b0bc-62a43cd1c521@www.fastmail.com> It is not too surprising to me that this example turned out to be degenerate, considering that we do not yet know exactly what higher coinductive types are ;-) and whether they have anything to do with quotients of coinductive types.... I'm optimistic that we can find ways to use (and constrain!) these tools which do not have such surprising results :) Best, Jon On Wed, Apr 10, 2019, at 7:05 PM, Dan Doel wrote: > Actually, perhaps it isn't fair to say that it's an oddity in this case, > because ?? is actually what we want for the lowest level, but not > what we want for the path level, and it would be more odd for the > fixed points to be swapped between levels. > > -- Dan > > On Wed, Apr 10, 2019 at 6:47 PM Dan Doel wrote: > > It seems like what's going on here is kind of related to the somewhat > > odd behavior of coinduction in Agda in general, where every set of > > definitions involving coinduction is always ??. This means that there > > is a never _path_ that chains arbitrarily many `steps` together. But > > what you really want for things to work out is for the paths to be well > > founded, so that an `== now x` has to eventually reach the now. > > > > Is this fixed by first defining the coinductive Delay, and then inductively > > defining a HIT like: > > > > data Part (A : Set) : Set where > > include : Delay A -> Part A > > step : ? d -> include (later d) == include (force d) > > > > since the steps no longer tie through a coinductive type? > > > > On Tue, Apr 9, 2019 at 4:09 AM Andrea Vezzosi wrote: > >> On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus wrote: > >> > > >> > Great!! :) > >> > That means we know what this type is: Delay(A) = 1. > >> > It's not so clear (to me) though how we can justify these higher > >> > coinductive types. > >> > >> It seems that this example should make sense as a cubical set in the > >> same style as the construction of HITs in CTT ? > >> Just defined as a mixed inductive-coinductive type rather than purely inductive. > >> > >> https://arxiv.org/abs/1802.01170 > >> > >> > > >> > On 08/04/19 19:34, Andrea Vezzosi wrote: > >> > > Oh, yeah, I hadn't thought about it, but indeed there's nothing > >> > > special about "now" here. > >> > > > >> > > mutual > >> > > never?? : ? (x : Delay? A) ? never? ? x > >> > > never?? x i .force = never? (x .force) i > >> > > > >> > > never? : ? (x : Delay A) ? never ? x > >> > > never? x i = step (never?? (delay x) i) i > >> > > > >> > > > >> > > > >> > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus wrote: > >> > >> Wow, thanks, Andrea! > >> > >> Can this proof be extended to show that Delay(A) is contractible? > >> > >> -- Nicolai > >> > >> > >> > >> On 08/04/19 19:01, Andrea Vezzosi wrote: > >> > >>> Here is a proof that "never" is equal to "now x", making use of path > >> > >>> abstraction and copatterns. > >> > >>> > >> > >>> mutual > >> > >>> never? : Delay? A > >> > >>> never? .force = never > >> > >>> > >> > >>> never : Delay A > >> > >>> never = later never? > >> > >>> > >> > >>> mutual > >> > >>> never?now? : ? (x : A) ? never? ? delay (now x) > >> > >>> never?now? x i .force = never?now x i > >> > >>> > >> > >>> never?now : ? (x : A) ? never ? now x > >> > >>> never?now x i = step (never?now? x i) i > >> > >>> > >> > >>> Of course one still wonders what Delay really is. > >> > >>> > >> > >>> This definition is accepted because the corecursion goes through the > >> > >>> coinductive projection ".force" and both "step" and application to"i" > >> > >>> are considered guardedness preserving. > >> > >>> > >> > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: > >> > >>>> On 02/04/19 21:23, Jesper Cockx wrote: > >> > >>>> > >> > >>>> Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P > >> > >>>> > >> > >>>> > >> > >>>> Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! > >> > >>>> It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. > >> > >>>> > >> > >>>> About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. > >> > >>>> > >> > >>>> > >> > >>>> This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). > >> > >>>> > >> > >>>> So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). > >> > >>>> > >> > >>>> The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: > >> > >>>> > >> > >>>> - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. > >> > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). > >> > >>>> > >> > >>>> > >> > >>>> `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) > >> > >>>> > >> > >>>> - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). > >> > >>>> > >> > >>>> This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. > >> > >>>> > >> > >>>> > >> > >>>> Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) > >> > >>>> -- Nicolai > >> > >>>> > >> > >>>> > >> > >>>> > >> > >>>> -- Jesper > >> > >>>> > >> > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: > >> > >>>>> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? > >> > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) > >> > >>>>> -- Nicolai > >> > >>>>> > >> > >>>>> > >> > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: > >> > >>>>> > >> > >>>>> Hi Nicolai, > >> > >>>>> > >> > >>>>> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. > >> > >>>>> > >> > >>>>> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. > >> > >>>>> > >> > >>>>> -- Jesper > >> > >>>>> > >> > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: > >> > >>>>>> Hi Jesper, > >> > >>>>>> > >> > >>>>>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. > >> > >>>>>> > >> > >>>>>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). > >> > >>>>>> > >> > >>>>>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. > >> > >>>>>> > >> > >>>>>> Cheers, > >> > >>>>>> Nicolai > >> > >>>>>> > >> > >>>>>> > >> > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: > >> > >>>>>> > >> > >>>>>> Hi all, > >> > >>>>>> > >> > >>>>>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: > >> > >>>>>> > >> > >>>>>> data Delay (A : Set ?) : Set ? > >> > >>>>>> > >> > >>>>>> record Delay? (A : Set ?) : Set ? where > >> > >>>>>> coinductive > >> > >>>>>> field > >> > >>>>>> force : Delay A > >> > >>>>>> > >> > >>>>>> open Delay? public > >> > >>>>>> > >> > >>>>>> data Delay A where > >> > >>>>>> now : A ? Delay A > >> > >>>>>> later : Delay? A ? Delay A > >> > >>>>>> step : (x : Delay? A) ? later x ? x .force > >> > >>>>>> > >> > >>>>>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) > >> > >>>>>> > >> > >>>>>> Cheers, > >> > >>>>>> Jesper > >> > >>>>>> > >> > >>>>>> > >> > >>>>>> _______________________________________________ > >> > >>>>>> Agda mailing list > >> > >>>>>> Agda at lists.chalmers.se > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > >> > >>>>>> > >> > >>>>>> > >> > >>>>>> _______________________________________________ > >> > >>>>>> Agda mailing list > >> > >>>>>> Agda at lists.chalmers.se > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > >> > >>>> _______________________________________________ > >> > >>>> Agda mailing list > >> > >>>> Agda at lists.chalmers.se > >> > >>>> https://lists.chalmers.se/mailman/listinfo/agda > >> > > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From matthewdaggitt at gmail.com Thu Apr 11 04:30:29 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 11 Apr 2019 10:30:29 +0800 Subject: [Agda] `with' vs `case' In-Reply-To: <1554937274.2331.8.camel@one.mechvel.pereslavl.ru> References: <1554937274.2331.8.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, You should probably read the documentation for the `with` abstraction as it'll answer many of your questions. In particular it describes when `with` performs poorly and why `case` can't do everything `with` can. Best, Matthew On Thu, Apr 11, 2019 at 7:01 AM Sergei Meshveliani wrote: > Dear Agda team, > > Style guide of standard library writes for the code committers that > it is better to use the `with' construct than case_of_. > But > > (1) Earlier the team advised me to use case_of_ as possible. > > (2) I have a small application that adds a few items to standard > library, and a certain function f in the end that type-checks in > 5 seconds when f is written via case_of_ and its type check seems > to loop infinitely when f is written via `with'. > > Currently the Style guide actually suggests to use `with' everywhere > where it type-checks reasonably fast, and to use case_of_ in other > cases. > > Let a function g from standard be written via `with' and be > type-checked fast. May it occur that when it is used in application, it > explodes the type checking as in the example (2) ? > > Is not it better to use case_of_ instead of `with' in standard library > everywhere where it is type-checked? > > Thanks, > > ------ > Sergei > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From dan.doel at gmail.com Thu Apr 11 14:03:22 2019 From: dan.doel at gmail.com (Dan Doel) Date: Thu, 11 Apr 2019 08:03:22 -0400 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <68ef8632-b4e3-433c-b0bc-62a43cd1c521@www.fastmail.com> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> <68ef8632-b4e3-433c-b0bc-62a43cd1c521@www.fastmail.com> Message-ID: So, I thought about this a while longer. One thing to note is that you can avoid the coinductive proof working (I think) by making the argument to step inductive like so: data Delay A where now : A -> Delay A later : Delay' A -> Delay A step : ? d -> later (delay d) ? d -- delay d .force = d This still implies `later ? force`, but not the infinite path (you need a different one that I couldn't come up with to pass the termination checker, at least). Possibly sized types would let it still go through? I don't really know those well enough to say. -- Dan On Wed, Apr 10, 2019 at 7:16 PM Jon Sterling wrote: > It is not too surprising to me that this example turned out to be > degenerate, considering that we do not yet know exactly what higher > coinductive types are ;-) and whether they have anything to do with > quotients of coinductive types.... > > I'm optimistic that we can find ways to use (and constrain!) these tools > which do not have such surprising results :) > > Best, > Jon > > > On Wed, Apr 10, 2019, at 7:05 PM, Dan Doel wrote: > > Actually, perhaps it isn't fair to say that it's an oddity in this case, > > because ?? is actually what we want for the lowest level, but not > > what we want for the path level, and it would be more odd for the > > fixed points to be swapped between levels. > > > > -- Dan > > > > On Wed, Apr 10, 2019 at 6:47 PM Dan Doel wrote: > > > It seems like what's going on here is kind of related to the somewhat > > > odd behavior of coinduction in Agda in general, where every set of > > > definitions involving coinduction is always ??. This means that there > > > is a never _path_ that chains arbitrarily many `steps` together. But > > > what you really want for things to work out is for the paths to be well > > > founded, so that an `== now x` has to eventually reach the now. > > > > > > Is this fixed by first defining the coinductive Delay, and then > inductively > > > defining a HIT like: > > > > > > data Part (A : Set) : Set where > > > include : Delay A -> Part A > > > step : ? d -> include (later d) == include (force d) > > > > > > since the steps no longer tie through a coinductive type? > > > > > > On Tue, Apr 9, 2019 at 4:09 AM Andrea Vezzosi > wrote: > > >> On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus > wrote: > > >> > > > >> > Great!! :) > > >> > That means we know what this type is: Delay(A) = 1. > > >> > It's not so clear (to me) though how we can justify these higher > > >> > coinductive types. > > >> > > >> It seems that this example should make sense as a cubical set in the > > >> same style as the construction of HITs in CTT ? > > >> Just defined as a mixed inductive-coinductive type rather than > purely inductive. > > >> > > >> https://arxiv.org/abs/1802.01170 > > >> > > >> > > > >> > On 08/04/19 19:34, Andrea Vezzosi wrote: > > >> > > Oh, yeah, I hadn't thought about it, but indeed there's nothing > > >> > > special about "now" here. > > >> > > > > >> > > mutual > > >> > > never?? : ? (x : Delay? A) ? never? ? x > > >> > > never?? x i .force = never? (x .force) i > > >> > > > > >> > > never? : ? (x : Delay A) ? never ? x > > >> > > never? x i = step (never?? (delay x) i) i > > >> > > > > >> > > > > >> > > > > >> > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >> > >> Wow, thanks, Andrea! > > >> > >> Can this proof be extended to show that Delay(A) is > contractible? > > >> > >> -- Nicolai > > >> > >> > > >> > >> On 08/04/19 19:01, Andrea Vezzosi wrote: > > >> > >>> Here is a proof that "never" is equal to "now x", making use > of path > > >> > >>> abstraction and copatterns. > > >> > >>> > > >> > >>> mutual > > >> > >>> never? : Delay? A > > >> > >>> never? .force = never > > >> > >>> > > >> > >>> never : Delay A > > >> > >>> never = later never? > > >> > >>> > > >> > >>> mutual > > >> > >>> never?now? : ? (x : A) ? never? ? delay (now x) > > >> > >>> never?now? x i .force = never?now x i > > >> > >>> > > >> > >>> never?now : ? (x : A) ? never ? now x > > >> > >>> never?now x i = step (never?now? x i) i > > >> > >>> > > >> > >>> Of course one still wonders what Delay really is. > > >> > >>> > > >> > >>> This definition is accepted because the corecursion goes > through the > > >> > >>> coinductive projection ".force" and both "step" and > application to"i" > > >> > >>> are considered guardedness preserving. > > >> > >>> > > >> > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >> > >>>> On 02/04/19 21:23, Jesper Cockx wrote: > > >> > >>>> > > >> > >>>> Well, if `never` is equal to `now x`, then by transitivity > `now x` is equal to `now y` for any `x` and `y`, which would mean I found a > very complicated way to define the constant unit type :P > > >> > >>>> > > >> > >>>> > > >> > >>>> Right... the conjecture should be Delay(A) = Unit. I made a > silly mistake before! > > >> > >>>> It's possible that the theory doesn't allow us to prove > Delay(A) = 1, but I don't expect that we can show the negation of this. > > >> > >>>> > > >> > >>>> About terminology: Nisse informed me that `Delay` is used for > the (non-truncated) coinductive type with two constructors `now` and > `later`, while the properly truncated variant where `later^n x` = `now x` > for any finite `n` is called the partiality monad. > > >> > >>>> > > >> > >>>> > > >> > >>>> This is also the terminology that I know. In addition, > probably one would want to call something "partiality monad" only if it > actually is a monad. The definition for this that I find most elegant is > the one by Tarmo and Niccol? (iirc, this definition ends up being > equivalent to our suggestion in the "Partiality revisited" paper). > > >> > >>>> > > >> > >>>> So my question is actually whether the partiality monad is > definable as a higher coinductive type with two point constructors `now` > and `later` plus some path constructor(s). > > >> > >>>> > > >> > >>>> The problem with defining such a higher coinductive type `D` > is that all attempts at proving two of its elements are *not* equal seem to > fail: > > >> > >>>> > > >> > >>>> - Pattern matching on an equality between two constructors > with an absurd pattern () obviously doesn't work for higher inductive types. > > >> > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which > distinguishes the two elements doesn't work either because both `Bool` and > `Set` are inductively defined, so `f` can only depend on a finite prefix of > its input (i.e. f must be continuous). > > >> > >>>> > > >> > >>>> > > >> > >>>> `f : D -> Bool` shouldn't work even with a correct partiality > monad, because it shouldn't be decidable whether an element is `never`. One > could replace `Bool` by the Sierpinski space, which is by definition > Partiality(1). (btw, `Set` is not inductively defined?) > > >> > >>>> > > >> > >>>> - Defining an indexed datatype `data P : D -> Set` that is > empty at one index but not at another seems to work, but then we get into > trouble when we actually want to prove that it is empty for that particular > index (this is not really surprising because indexed datatypes can be > explained with normal datatypes + the equality type, so this is essentially > the same as the first option). > > >> > >>>> > > >> > >>>> This exhausts my bag of tricks when it comes to proving two > constructor forms are not equal. This seems to be an essential problem that > would pop up any time one tries to mix coinduction with higher > constructors. It would be an interesting research topic to try and define a > suitable notion of "higher coinductive type" which does not have this > problem. > > >> > >>>> > > >> > >>>> > > >> > >>>> Right, but I think we current have no idea what cubical > Agda's "higher coinductive types" are. It's interesting that Agda allows > these, but they could as well be inconsistent. (That's why I asked about > models before.) > > >> > >>>> -- Nicolai > > >> > >>>> > > >> > >>>> > > >> > >>>> > > >> > >>>> -- Jesper > > >> > >>>> > > >> > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >> > >>>>> Interesting! So, in case Delay(Unit) does turn out to be > contractible, we might also expect that Delay(A) = A. This doesn't seem > intuitive to me, but it could still be true. Do you see a way to construct > Delay(A) -> A? If there is such a function, it should be quite canonical, > and maybe it's easier to write this function than to prove the > contractibility. But if we can't do this, and we also can't distinguish > 'now' and 'never', then I have no idea what Delay(A) actually is. Does any > of the cubical models capture such constructions? > > >> > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) > > >> > >>>>> -- Nicolai > > >> > >>>>> > > >> > >>>>> > > >> > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: > > >> > >>>>> > > >> > >>>>> Hi Nicolai, > > >> > >>>>> > > >> > >>>>> Yes, Christian and I suspected the same thing (that this > definition of the delay monad is actually a unit type), but I haven't > managed to prove that either because of some mysterious termination checker > problem. > > >> > >>>>> > > >> > >>>>> I'm currently trying a different approach where I define the > Delay type mutually with the ? type so I can quotient by the relation > "normalize to the same value in a finite number of steps". I'll let you > know later if it works. > > >> > >>>>> > > >> > >>>>> -- Jesper > > >> > >>>>> > > >> > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > > >> > >>>>>> Hi Jesper, > > >> > >>>>>> > > >> > >>>>>> I find this construction very interesting since it's the > first "cubical higher co-inductive type" that I've seen! Unfortunately, I > don't know how these "CHCIT's" behave in Agda. > > >> > >>>>>> > > >> > >>>>>> If I had to guess, I would expect that you *cannot* > distinguish now and never, which would mean that your construction doesn't > give you what you wanted. The difference to the quotiented delay monad (or, > for what it's worth, the QIT/QIIT partiality monad) is that your > construction inserts the equations "coinductively" (usually, only the > later-steps are coinductive). > > >> > >>>>>> > > >> > >>>>>> Thus, my guess is that Delay(Unit) could be contractible. > One could try to prove that every element is equal to 'now'. > > >> > >>>>>> > > >> > >>>>>> Cheers, > > >> > >>>>>> Nicolai > > >> > >>>>>> > > >> > >>>>>> > > >> > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: > > >> > >>>>>> > > >> > >>>>>> Hi all, > > >> > >>>>>> > > >> > >>>>>> As an experiment with cubical agda, I was trying to define > a quotiented version of the Delay monad as a higher inductive type. I'm > using this definition: > > >> > >>>>>> > > >> > >>>>>> data Delay (A : Set ?) : Set ? > > >> > >>>>>> > > >> > >>>>>> record Delay? (A : Set ?) : Set ? where > > >> > >>>>>> coinductive > > >> > >>>>>> field > > >> > >>>>>> force : Delay A > > >> > >>>>>> > > >> > >>>>>> open Delay? public > > >> > >>>>>> > > >> > >>>>>> data Delay A where > > >> > >>>>>> now : A ? Delay A > > >> > >>>>>> later : Delay? A ? Delay A > > >> > >>>>>> step : (x : Delay? A) ? later x ? x .force > > >> > >>>>>> > > >> > >>>>>> I managed to implement some basic functions on it but I got > stuck on trying to prove the looping computation 'never' does not in fact > evaluate to any value. My code is available here: > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 > I looked at the problem together with Christian Sattler and we are not even > sure it is actually provable. Does anyone have an idea how to proceed? Or > has someone already experimented with coinductive types in cubical and > encountered similar problems? (I looked at the paper "Partiality revisited" > by Thorsten, Nisse and Nicolai but they use a very different definition of > the partiality monad.) > > >> > >>>>>> > > >> > >>>>>> Cheers, > > >> > >>>>>> Jesper > > >> > >>>>>> > > >> > >>>>>> > > >> > >>>>>> _______________________________________________ > > >> > >>>>>> Agda mailing list > > >> > >>>>>> Agda at lists.chalmers.se > > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > > >> > >>>>>> > > >> > >>>>>> > > >> > >>>>>> _______________________________________________ > > >> > >>>>>> Agda mailing list > > >> > >>>>>> Agda at lists.chalmers.se > > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > > >> > >>>> _______________________________________________ > > >> > >>>> Agda mailing list > > >> > >>>> Agda at lists.chalmers.se > > >> > >>>> https://lists.chalmers.se/mailman/listinfo/agda > > >> > > > >> _______________________________________________ > > >> Agda mailing list > > >> Agda at lists.chalmers.se > > >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From sanzhiyan at gmail.com Thu Apr 11 15:35:22 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Thu, 11 Apr 2019 15:35:22 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> <68ef8632-b4e3-433c-b0bc-62a43cd1c521@www.fastmail.com> Message-ID: This sounded like an interesting variation, however one can build this proof which is terminating, even if agda does not recognize it so. delay-never : delay {A = A} never ? never? delay-never i .force = never mutual never?? : ? (x : Delay? A) ? never? ? x never?? x i .force = never? (x .force) i {-# TERMINATING #-} never? : ? (x : Delay A) ? never ? x never? x i = hcomp (\ { k (i = i0) ? later (delay-never k) ; k (i = i1) ? step x k }) (step (later (never?? (delay x) i)) i) Would be interesting to see what happens in the model. On Thu, Apr 11, 2019 at 2:03 PM Dan Doel wrote: > > So, I thought about this a while longer. > > One thing to note is that you can avoid the coinductive proof working > (I think) by making the argument to step inductive like so: > > data Delay A where > now : A -> Delay A > later : Delay' A -> Delay A > step : ? d -> later (delay d) ? d -- delay d .force = d > > This still implies `later ? force`, but not the infinite path (you need a different > one that I couldn't come up with to pass the termination checker, at least). > Possibly sized types would let it still go through? I don't really know those > well enough to say. > > -- Dan > > On Wed, Apr 10, 2019 at 7:16 PM Jon Sterling wrote: >> >> It is not too surprising to me that this example turned out to be degenerate, considering that we do not yet know exactly what higher coinductive types are ;-) and whether they have anything to do with quotients of coinductive types.... >> >> I'm optimistic that we can find ways to use (and constrain!) these tools which do not have such surprising results :) >> >> Best, >> Jon >> >> >> On Wed, Apr 10, 2019, at 7:05 PM, Dan Doel wrote: >> > Actually, perhaps it isn't fair to say that it's an oddity in this case, >> > because ?? is actually what we want for the lowest level, but not >> > what we want for the path level, and it would be more odd for the >> > fixed points to be swapped between levels. >> > >> > -- Dan >> > >> > On Wed, Apr 10, 2019 at 6:47 PM Dan Doel wrote: >> > > It seems like what's going on here is kind of related to the somewhat >> > > odd behavior of coinduction in Agda in general, where every set of >> > > definitions involving coinduction is always ??. This means that there >> > > is a never _path_ that chains arbitrarily many `steps` together. But >> > > what you really want for things to work out is for the paths to be well >> > > founded, so that an `== now x` has to eventually reach the now. >> > > >> > > Is this fixed by first defining the coinductive Delay, and then inductively >> > > defining a HIT like: >> > > >> > > data Part (A : Set) : Set where >> > > include : Delay A -> Part A >> > > step : ? d -> include (later d) == include (force d) >> > > >> > > since the steps no longer tie through a coinductive type? >> > > >> > > On Tue, Apr 9, 2019 at 4:09 AM Andrea Vezzosi wrote: >> > >> On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus wrote: >> > >> > >> > >> > Great!! :) >> > >> > That means we know what this type is: Delay(A) = 1. >> > >> > It's not so clear (to me) though how we can justify these higher >> > >> > coinductive types. >> > >> >> > >> It seems that this example should make sense as a cubical set in the >> > >> same style as the construction of HITs in CTT ? >> > >> Just defined as a mixed inductive-coinductive type rather than purely inductive. >> > >> >> > >> https://arxiv.org/abs/1802.01170 >> > >> >> > >> > >> > >> > On 08/04/19 19:34, Andrea Vezzosi wrote: >> > >> > > Oh, yeah, I hadn't thought about it, but indeed there's nothing >> > >> > > special about "now" here. >> > >> > > >> > >> > > mutual >> > >> > > never?? : ? (x : Delay? A) ? never? ? x >> > >> > > never?? x i .force = never? (x .force) i >> > >> > > >> > >> > > never? : ? (x : Delay A) ? never ? x >> > >> > > never? x i = step (never?? (delay x) i) i >> > >> > > >> > >> > > >> > >> > > >> > >> > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus wrote: >> > >> > >> Wow, thanks, Andrea! >> > >> > >> Can this proof be extended to show that Delay(A) is contractible? >> > >> > >> -- Nicolai >> > >> > >> >> > >> > >> On 08/04/19 19:01, Andrea Vezzosi wrote: >> > >> > >>> Here is a proof that "never" is equal to "now x", making use of path >> > >> > >>> abstraction and copatterns. >> > >> > >>> >> > >> > >>> mutual >> > >> > >>> never? : Delay? A >> > >> > >>> never? .force = never >> > >> > >>> >> > >> > >>> never : Delay A >> > >> > >>> never = later never? >> > >> > >>> >> > >> > >>> mutual >> > >> > >>> never?now? : ? (x : A) ? never? ? delay (now x) >> > >> > >>> never?now? x i .force = never?now x i >> > >> > >>> >> > >> > >>> never?now : ? (x : A) ? never ? now x >> > >> > >>> never?now x i = step (never?now? x i) i >> > >> > >>> >> > >> > >>> Of course one still wonders what Delay really is. >> > >> > >>> >> > >> > >>> This definition is accepted because the corecursion goes through the >> > >> > >>> coinductive projection ".force" and both "step" and application to"i" >> > >> > >>> are considered guardedness preserving. >> > >> > >>> >> > >> > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus wrote: >> > >> > >>>> On 02/04/19 21:23, Jesper Cockx wrote: >> > >> > >>>> >> > >> > >>>> Well, if `never` is equal to `now x`, then by transitivity `now x` is equal to `now y` for any `x` and `y`, which would mean I found a very complicated way to define the constant unit type :P >> > >> > >>>> >> > >> > >>>> >> > >> > >>>> Right... the conjecture should be Delay(A) = Unit. I made a silly mistake before! >> > >> > >>>> It's possible that the theory doesn't allow us to prove Delay(A) = 1, but I don't expect that we can show the negation of this. >> > >> > >>>> >> > >> > >>>> About terminology: Nisse informed me that `Delay` is used for the (non-truncated) coinductive type with two constructors `now` and `later`, while the properly truncated variant where `later^n x` = `now x` for any finite `n` is called the partiality monad. >> > >> > >>>> >> > >> > >>>> >> > >> > >>>> This is also the terminology that I know. In addition, probably one would want to call something "partiality monad" only if it actually is a monad. The definition for this that I find most elegant is the one by Tarmo and Niccol? (iirc, this definition ends up being equivalent to our suggestion in the "Partiality revisited" paper). >> > >> > >>>> >> > >> > >>>> So my question is actually whether the partiality monad is definable as a higher coinductive type with two point constructors `now` and `later` plus some path constructor(s). >> > >> > >>>> >> > >> > >>>> The problem with defining such a higher coinductive type `D` is that all attempts at proving two of its elements are *not* equal seem to fail: >> > >> > >>>> >> > >> > >>>> - Pattern matching on an equality between two constructors with an absurd pattern () obviously doesn't work for higher inductive types. >> > >> > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which distinguishes the two elements doesn't work either because both `Bool` and `Set` are inductively defined, so `f` can only depend on a finite prefix of its input (i.e. f must be continuous). >> > >> > >>>> >> > >> > >>>> >> > >> > >>>> `f : D -> Bool` shouldn't work even with a correct partiality monad, because it shouldn't be decidable whether an element is `never`. One could replace `Bool` by the Sierpinski space, which is by definition Partiality(1). (btw, `Set` is not inductively defined?) >> > >> > >>>> >> > >> > >>>> - Defining an indexed datatype `data P : D -> Set` that is empty at one index but not at another seems to work, but then we get into trouble when we actually want to prove that it is empty for that particular index (this is not really surprising because indexed datatypes can be explained with normal datatypes + the equality type, so this is essentially the same as the first option). >> > >> > >>>> >> > >> > >>>> This exhausts my bag of tricks when it comes to proving two constructor forms are not equal. This seems to be an essential problem that would pop up any time one tries to mix coinduction with higher constructors. It would be an interesting research topic to try and define a suitable notion of "higher coinductive type" which does not have this problem. >> > >> > >>>> >> > >> > >>>> >> > >> > >>>> Right, but I think we current have no idea what cubical Agda's "higher coinductive types" are. It's interesting that Agda allows these, but they could as well be inconsistent. (That's why I asked about models before.) >> > >> > >>>> -- Nicolai >> > >> > >>>> >> > >> > >>>> >> > >> > >>>> >> > >> > >>>> -- Jesper >> > >> > >>>> >> > >> > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus wrote: >> > >> > >>>>> Interesting! So, in case Delay(Unit) does turn out to be contractible, we might also expect that Delay(A) = A. This doesn't seem intuitive to me, but it could still be true. Do you see a way to construct Delay(A) -> A? If there is such a function, it should be quite canonical, and maybe it's easier to write this function than to prove the contractibility. But if we can't do this, and we also can't distinguish 'now' and 'never', then I have no idea what Delay(A) actually is. Does any of the cubical models capture such constructions? >> > >> > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) >> > >> > >>>>> -- Nicolai >> > >> > >>>>> >> > >> > >>>>> >> > >> > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: >> > >> > >>>>> >> > >> > >>>>> Hi Nicolai, >> > >> > >>>>> >> > >> > >>>>> Yes, Christian and I suspected the same thing (that this definition of the delay monad is actually a unit type), but I haven't managed to prove that either because of some mysterious termination checker problem. >> > >> > >>>>> >> > >> > >>>>> I'm currently trying a different approach where I define the Delay type mutually with the ? type so I can quotient by the relation "normalize to the same value in a finite number of steps". I'll let you know later if it works. >> > >> > >>>>> >> > >> > >>>>> -- Jesper >> > >> > >>>>> >> > >> > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus wrote: >> > >> > >>>>>> Hi Jesper, >> > >> > >>>>>> >> > >> > >>>>>> I find this construction very interesting since it's the first "cubical higher co-inductive type" that I've seen! Unfortunately, I don't know how these "CHCIT's" behave in Agda. >> > >> > >>>>>> >> > >> > >>>>>> If I had to guess, I would expect that you *cannot* distinguish now and never, which would mean that your construction doesn't give you what you wanted. The difference to the quotiented delay monad (or, for what it's worth, the QIT/QIIT partiality monad) is that your construction inserts the equations "coinductively" (usually, only the later-steps are coinductive). >> > >> > >>>>>> >> > >> > >>>>>> Thus, my guess is that Delay(Unit) could be contractible. One could try to prove that every element is equal to 'now'. >> > >> > >>>>>> >> > >> > >>>>>> Cheers, >> > >> > >>>>>> Nicolai >> > >> > >>>>>> >> > >> > >>>>>> >> > >> > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: >> > >> > >>>>>> >> > >> > >>>>>> Hi all, >> > >> > >>>>>> >> > >> > >>>>>> As an experiment with cubical agda, I was trying to define a quotiented version of the Delay monad as a higher inductive type. I'm using this definition: >> > >> > >>>>>> >> > >> > >>>>>> data Delay (A : Set ?) : Set ? >> > >> > >>>>>> >> > >> > >>>>>> record Delay? (A : Set ?) : Set ? where >> > >> > >>>>>> coinductive >> > >> > >>>>>> field >> > >> > >>>>>> force : Delay A >> > >> > >>>>>> >> > >> > >>>>>> open Delay? public >> > >> > >>>>>> >> > >> > >>>>>> data Delay A where >> > >> > >>>>>> now : A ? Delay A >> > >> > >>>>>> later : Delay? A ? Delay A >> > >> > >>>>>> step : (x : Delay? A) ? later x ? x .force >> > >> > >>>>>> >> > >> > >>>>>> I managed to implement some basic functions on it but I got stuck on trying to prove the looping computation 'never' does not in fact evaluate to any value. My code is available here: https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 I looked at the problem together with Christian Sattler and we are not even sure it is actually provable. Does anyone have an idea how to proceed? Or has someone already experimented with coinductive types in cubical and encountered similar problems? (I looked at the paper "Partiality revisited" by Thorsten, Nisse and Nicolai but they use a very different definition of the partiality monad.) >> > >> > >>>>>> >> > >> > >>>>>> Cheers, >> > >> > >>>>>> Jesper >> > >> > >>>>>> >> > >> > >>>>>> >> > >> > >>>>>> _______________________________________________ >> > >> > >>>>>> Agda mailing list >> > >> > >>>>>> Agda at lists.chalmers.se >> > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >> > >> > >>>>>> >> > >> > >>>>>> >> > >> > >>>>>> _______________________________________________ >> > >> > >>>>>> Agda mailing list >> > >> > >>>>>> Agda at lists.chalmers.se >> > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda >> > >> > >>>> _______________________________________________ >> > >> > >>>> Agda mailing list >> > >> > >>>> Agda at lists.chalmers.se >> > >> > >>>> https://lists.chalmers.se/mailman/listinfo/agda >> > >> > >> > >> _______________________________________________ >> > >> Agda mailing list >> > >> Agda at lists.chalmers.se >> > >> https://lists.chalmers.se/mailman/listinfo/agda >> > _______________________________________________ >> > Agda mailing list >> > Agda at lists.chalmers.se >> > https://lists.chalmers.se/mailman/listinfo/agda >> > >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From pierre.lescanne at ens-lyon.fr Thu Apr 11 16:48:01 2019 From: pierre.lescanne at ens-lyon.fr (Pierre Lescanne (en)) Date: Thu, 11 Apr 2019 16:48:01 +0200 Subject: [Agda] Two antagonistic definitions Message-ID: Here is my problem. I set it in the Vec data structure, since it is a well known. Assume that I want to define both ++ and another operation ++? _++_ : ?{A : Set}{n m : ?} ? Vec A n ? Vec A m ? Vec A (n + m) [] ++ v = v (x ? v?) ++ v? = x ? (v? ++ v?) _++?_ : ?{A : Set}{n m : ?} ? Vec A n ? Vec A m ? Vec A (n + m) v ++? [] = v v? ++? (x ? v?) = (v? ?? x) ++? v? Agda does want to accept the second definition or the first if I use Vec A (m + n) instead.?? How should I proceed ? Pierre Lescanne From Jesper at sikanda.be Thu Apr 11 18:17:10 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Thu, 11 Apr 2019 18:17:10 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> <68ef8632-b4e3-433c-b0bc-62a43cd1c521@www.fastmail.com> Message-ID: Hi, Thanks for all the interesting replies, in particular to Andrea for proving that my definition of Delay is contractible (which I was already beginning to suspect but was unable to prove). I have a new proposal for the definition of Delay as a mixed inductive-(higher inductive)-coinductive type: ```agda open import Agda.Builtin.Size open import Cubical.Core.Prelude variable ? : Level A : Set ? x : A data Delay (A : Set ?) (i : Size) : Set ? data Delay? (A : Set ?) (i : Size) (i? : Size) : Delay A i ? A ? Set ? record Delay? (A : Set ?) (i : Size) : Set ? where coinductive field force : {j : Size< i} ? Delay A j open Delay? public data Delay A i where now : A ? Delay A i later : Delay? A i ? Delay A i norm : {d : Delay? A i} {j : Size< i} ? Delay? A j i (d .force) x ? later d ? now x data Delay? A i i? where now? : ? x ? Delay? A i i? (now x) x later? : {d : Delay? A i} {j : Size< i} ? Delay? A j i? (d .force) x ? Delay? A i i? (later d) x _?_ : {A : Set ?} {i i? : Size} ? Delay A i ? A ? Set ? _?_ {A = A} {i} {i?} = Delay? A i i? ``` The main difference with the previous proposal (apart from the Sizes) is that Delay is defined mutually with an *inductive* relation `Delay? d x` expressing that `d` terminates with value `x`, and the higher constructor of Delay takes an argument of this type. In particular, the higher constructor no longer takes a recursive argument so it's no longer possible to construct the infinite sequence of `step`s in Andrea's proof. I wonder whether we can prove for this definition that: 1. it is a monad 2. `now x` is not equal to `never` I suspect 2 is currently not provable in Agda, but it seems to be a technical limitation rather than a real problem with this definition. -- Jesper On Thu, Apr 11, 2019 at 3:36 PM Andrea Vezzosi wrote: > This sounded like an interesting variation, however one can build this > proof which is terminating, even if agda does not recognize it so. > > delay-never : delay {A = A} never ? never? > delay-never i .force = never > > mutual > never?? : ? (x : Delay? A) ? never? ? x > never?? x i .force = never? (x .force) i > > {-# TERMINATING #-} > never? : ? (x : Delay A) ? never ? x > never? x i = hcomp > (\ { k (i = i0) ? later (delay-never k) ; k (i = > i1) ? step x k }) > (step (later (never?? (delay x) i)) i) > > > Would be interesting to see what happens in the model. > > On Thu, Apr 11, 2019 at 2:03 PM Dan Doel wrote: > > > > So, I thought about this a while longer. > > > > One thing to note is that you can avoid the coinductive proof working > > (I think) by making the argument to step inductive like so: > > > > data Delay A where > > now : A -> Delay A > > later : Delay' A -> Delay A > > step : ? d -> later (delay d) ? d -- delay d .force = d > > > > This still implies `later ? force`, but not the infinite path (you need > a different > > one that I couldn't come up with to pass the termination checker, at > least). > > Possibly sized types would let it still go through? I don't really know > those > > well enough to say. > > > > -- Dan > > > > On Wed, Apr 10, 2019 at 7:16 PM Jon Sterling > wrote: > >> > >> It is not too surprising to me that this example turned out to be > degenerate, considering that we do not yet know exactly what higher > coinductive types are ;-) and whether they have anything to do with > quotients of coinductive types.... > >> > >> I'm optimistic that we can find ways to use (and constrain!) these > tools which do not have such surprising results :) > >> > >> Best, > >> Jon > >> > >> > >> On Wed, Apr 10, 2019, at 7:05 PM, Dan Doel wrote: > >> > Actually, perhaps it isn't fair to say that it's an oddity in this > case, > >> > because ?? is actually what we want for the lowest level, but not > >> > what we want for the path level, and it would be more odd for the > >> > fixed points to be swapped between levels. > >> > > >> > -- Dan > >> > > >> > On Wed, Apr 10, 2019 at 6:47 PM Dan Doel wrote: > >> > > It seems like what's going on here is kind of related to the > somewhat > >> > > odd behavior of coinduction in Agda in general, where every set of > >> > > definitions involving coinduction is always ??. This means that > there > >> > > is a never _path_ that chains arbitrarily many `steps` together. But > >> > > what you really want for things to work out is for the paths to be > well > >> > > founded, so that an `== now x` has to eventually reach the now. > >> > > > >> > > Is this fixed by first defining the coinductive Delay, and then > inductively > >> > > defining a HIT like: > >> > > > >> > > data Part (A : Set) : Set where > >> > > include : Delay A -> Part A > >> > > step : ? d -> include (later d) == include (force d) > >> > > > >> > > since the steps no longer tie through a coinductive type? > >> > > > >> > > On Tue, Apr 9, 2019 at 4:09 AM Andrea Vezzosi > wrote: > >> > >> On Mon, Apr 8, 2019 at 8:38 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > >> > >> > > >> > >> > Great!! :) > >> > >> > That means we know what this type is: Delay(A) = 1. > >> > >> > It's not so clear (to me) though how we can justify these higher > >> > >> > coinductive types. > >> > >> > >> > >> It seems that this example should make sense as a cubical set in > the > >> > >> same style as the construction of HITs in CTT ? > >> > >> Just defined as a mixed inductive-coinductive type rather than > purely inductive. > >> > >> > >> > >> https://arxiv.org/abs/1802.01170 > >> > >> > >> > >> > > >> > >> > On 08/04/19 19:34, Andrea Vezzosi wrote: > >> > >> > > Oh, yeah, I hadn't thought about it, but indeed there's > nothing > >> > >> > > special about "now" here. > >> > >> > > > >> > >> > > mutual > >> > >> > > never?? : ? (x : Delay? A) ? never? ? x > >> > >> > > never?? x i .force = never? (x .force) i > >> > >> > > > >> > >> > > never? : ? (x : Delay A) ? never ? x > >> > >> > > never? x i = step (never?? (delay x) i) i > >> > >> > > > >> > >> > > > >> > >> > > > >> > >> > > On Mon, Apr 8, 2019 at 8:11 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > >> > >> > >> Wow, thanks, Andrea! > >> > >> > >> Can this proof be extended to show that Delay(A) is > contractible? > >> > >> > >> -- Nicolai > >> > >> > >> > >> > >> > >> On 08/04/19 19:01, Andrea Vezzosi wrote: > >> > >> > >>> Here is a proof that "never" is equal to "now x", making > use of path > >> > >> > >>> abstraction and copatterns. > >> > >> > >>> > >> > >> > >>> mutual > >> > >> > >>> never? : Delay? A > >> > >> > >>> never? .force = never > >> > >> > >>> > >> > >> > >>> never : Delay A > >> > >> > >>> never = later never? > >> > >> > >>> > >> > >> > >>> mutual > >> > >> > >>> never?now? : ? (x : A) ? never? ? delay (now x) > >> > >> > >>> never?now? x i .force = never?now x i > >> > >> > >>> > >> > >> > >>> never?now : ? (x : A) ? never ? now x > >> > >> > >>> never?now x i = step (never?now? x i) i > >> > >> > >>> > >> > >> > >>> Of course one still wonders what Delay really is. > >> > >> > >>> > >> > >> > >>> This definition is accepted because the corecursion goes > through the > >> > >> > >>> coinductive projection ".force" and both "step" and > application to"i" > >> > >> > >>> are considered guardedness preserving. > >> > >> > >>> > >> > >> > >>> On Tue, Apr 2, 2019 at 11:11 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > >> > >> > >>>> On 02/04/19 21:23, Jesper Cockx wrote: > >> > >> > >>>> > >> > >> > >>>> Well, if `never` is equal to `now x`, then by transitivity > `now x` is equal to `now y` for any `x` and `y`, which would mean I found a > very complicated way to define the constant unit type :P > >> > >> > >>>> > >> > >> > >>>> > >> > >> > >>>> Right... the conjecture should be Delay(A) = Unit. I made > a silly mistake before! > >> > >> > >>>> It's possible that the theory doesn't allow us to prove > Delay(A) = 1, but I don't expect that we can show the negation of this. > >> > >> > >>>> > >> > >> > >>>> About terminology: Nisse informed me that `Delay` is used > for the (non-truncated) coinductive type with two constructors `now` and > `later`, while the properly truncated variant where `later^n x` = `now x` > for any finite `n` is called the partiality monad. > >> > >> > >>>> > >> > >> > >>>> > >> > >> > >>>> This is also the terminology that I know. In addition, > probably one would want to call something "partiality monad" only if it > actually is a monad. The definition for this that I find most elegant is > the one by Tarmo and Niccol? (iirc, this definition ends up being > equivalent to our suggestion in the "Partiality revisited" paper). > >> > >> > >>>> > >> > >> > >>>> So my question is actually whether the partiality monad is > definable as a higher coinductive type with two point constructors `now` > and `later` plus some path constructor(s). > >> > >> > >>>> > >> > >> > >>>> The problem with defining such a higher coinductive type > `D` is that all attempts at proving two of its elements are *not* equal > seem to fail: > >> > >> > >>>> > >> > >> > >>>> - Pattern matching on an equality between two constructors > with an absurd pattern () obviously doesn't work for higher inductive types. > >> > >> > >>>> - Defining a function `f : D -> Bool` or `D -> Set` which > distinguishes the two elements doesn't work either because both `Bool` and > `Set` are inductively defined, so `f` can only depend on a finite prefix of > its input (i.e. f must be continuous). > >> > >> > >>>> > >> > >> > >>>> > >> > >> > >>>> `f : D -> Bool` shouldn't work even with a correct > partiality monad, because it shouldn't be decidable whether an element is > `never`. One could replace `Bool` by the Sierpinski space, which is by > definition Partiality(1). (btw, `Set` is not inductively defined?) > >> > >> > >>>> > >> > >> > >>>> - Defining an indexed datatype `data P : D -> Set` that is > empty at one index but not at another seems to work, but then we get into > trouble when we actually want to prove that it is empty for that particular > index (this is not really surprising because indexed datatypes can be > explained with normal datatypes + the equality type, so this is essentially > the same as the first option). > >> > >> > >>>> > >> > >> > >>>> This exhausts my bag of tricks when it comes to proving > two constructor forms are not equal. This seems to be an essential problem > that would pop up any time one tries to mix coinduction with higher > constructors. It would be an interesting research topic to try and define a > suitable notion of "higher coinductive type" which does not have this > problem. > >> > >> > >>>> > >> > >> > >>>> > >> > >> > >>>> Right, but I think we current have no idea what cubical > Agda's "higher coinductive types" are. It's interesting that Agda allows > these, but they could as well be inconsistent. (That's why I asked about > models before.) > >> > >> > >>>> -- Nicolai > >> > >> > >>>> > >> > >> > >>>> > >> > >> > >>>> > >> > >> > >>>> -- Jesper > >> > >> > >>>> > >> > >> > >>>> On Tue, Apr 2, 2019 at 10:06 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > >> > >> > >>>>> Interesting! So, in case Delay(Unit) does turn out to be > contractible, we might also expect that Delay(A) = A. This doesn't seem > intuitive to me, but it could still be true. Do you see a way to construct > Delay(A) -> A? If there is such a function, it should be quite canonical, > and maybe it's easier to write this function than to prove the > contractibility. But if we can't do this, and we also can't distinguish > 'now' and 'never', then I have no idea what Delay(A) actually is. Does any > of the cubical models capture such constructions? > >> > >> > >>>>> (Maybe, at this point, we shouldn't call it "Delay" :) > >> > >> > >>>>> -- Nicolai > >> > >> > >>>>> > >> > >> > >>>>> > >> > >> > >>>>> On 02/04/19 15:08, Jesper Cockx wrote: > >> > >> > >>>>> > >> > >> > >>>>> Hi Nicolai, > >> > >> > >>>>> > >> > >> > >>>>> Yes, Christian and I suspected the same thing (that this > definition of the delay monad is actually a unit type), but I haven't > managed to prove that either because of some mysterious termination checker > problem. > >> > >> > >>>>> > >> > >> > >>>>> I'm currently trying a different approach where I define > the Delay type mutually with the ? type so I can quotient by the relation > "normalize to the same value in a finite number of steps". I'll let you > know later if it works. > >> > >> > >>>>> > >> > >> > >>>>> -- Jesper > >> > >> > >>>>> > >> > >> > >>>>> On Tue, Apr 2, 2019 at 3:15 PM Nicolai Kraus < > nicolai.kraus at gmail.com> wrote: > >> > >> > >>>>>> Hi Jesper, > >> > >> > >>>>>> > >> > >> > >>>>>> I find this construction very interesting since it's the > first "cubical higher co-inductive type" that I've seen! Unfortunately, I > don't know how these "CHCIT's" behave in Agda. > >> > >> > >>>>>> > >> > >> > >>>>>> If I had to guess, I would expect that you *cannot* > distinguish now and never, which would mean that your construction doesn't > give you what you wanted. The difference to the quotiented delay monad (or, > for what it's worth, the QIT/QIIT partiality monad) is that your > construction inserts the equations "coinductively" (usually, only the > later-steps are coinductive). > >> > >> > >>>>>> > >> > >> > >>>>>> Thus, my guess is that Delay(Unit) could be > contractible. One could try to prove that every element is equal to 'now'. > >> > >> > >>>>>> > >> > >> > >>>>>> Cheers, > >> > >> > >>>>>> Nicolai > >> > >> > >>>>>> > >> > >> > >>>>>> > >> > >> > >>>>>> On 29/03/19 18:40, Jesper Cockx wrote: > >> > >> > >>>>>> > >> > >> > >>>>>> Hi all, > >> > >> > >>>>>> > >> > >> > >>>>>> As an experiment with cubical agda, I was trying to > define a quotiented version of the Delay monad as a higher inductive type. > I'm using this definition: > >> > >> > >>>>>> > >> > >> > >>>>>> data Delay (A : Set ?) : Set ? > >> > >> > >>>>>> > >> > >> > >>>>>> record Delay? (A : Set ?) : Set ? where > >> > >> > >>>>>> coinductive > >> > >> > >>>>>> field > >> > >> > >>>>>> force : Delay A > >> > >> > >>>>>> > >> > >> > >>>>>> open Delay? public > >> > >> > >>>>>> > >> > >> > >>>>>> data Delay A where > >> > >> > >>>>>> now : A ? Delay A > >> > >> > >>>>>> later : Delay? A ? Delay A > >> > >> > >>>>>> step : (x : Delay? A) ? later x ? x .force > >> > >> > >>>>>> > >> > >> > >>>>>> I managed to implement some basic functions on it but I > got stuck on trying to prove the looping computation 'never' does not in > fact evaluate to any value. My code is available here: > https://github.com/jespercockx/cubical/commit/f1647a90c1b27aadd5da748f08e23630221cc3d9 > I looked at the problem together with Christian Sattler and we are not even > sure it is actually provable. Does anyone have an idea how to proceed? Or > has someone already experimented with coinductive types in cubical and > encountered similar problems? (I looked at the paper "Partiality revisited" > by Thorsten, Nisse and Nicolai but they use a very different definition of > the partiality monad.) > >> > >> > >>>>>> > >> > >> > >>>>>> Cheers, > >> > >> > >>>>>> Jesper > >> > >> > >>>>>> > >> > >> > >>>>>> > >> > >> > >>>>>> _______________________________________________ > >> > >> > >>>>>> Agda mailing list > >> > >> > >>>>>> Agda at lists.chalmers.se > >> > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > >> > >> > >>>>>> > >> > >> > >>>>>> > >> > >> > >>>>>> _______________________________________________ > >> > >> > >>>>>> Agda mailing list > >> > >> > >>>>>> Agda at lists.chalmers.se > >> > >> > >>>>>> https://lists.chalmers.se/mailman/listinfo/agda > >> > >> > >>>> _______________________________________________ > >> > >> > >>>> Agda mailing list > >> > >> > >>>> Agda at lists.chalmers.se > >> > >> > >>>> https://lists.chalmers.se/mailman/listinfo/agda > >> > >> > > >> > >> _______________________________________________ > >> > >> Agda mailing list > >> > >> Agda at lists.chalmers.se > >> > >> https://lists.chalmers.se/mailman/listinfo/agda > >> > _______________________________________________ > >> > Agda mailing list > >> > Agda at lists.chalmers.se > >> > https://lists.chalmers.se/mailman/listinfo/agda > >> > > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Thu Apr 11 19:21:45 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 11 Apr 2019 19:21:45 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <9a3d20de-ccfc-2b19-bec6-449f72a6e022@gmail.com> <4ce19bf6-7941-7de7-3e2a-11ffa5311f6c@gmail.com> <68ef8632-b4e3-433c-b0bc-62a43cd1c521@www.fastmail.com> Message-ID: <597f5272-688e-c5f8-c747-80e9fb189536@cse.gu.se> On 11/04/2019 18.17, Jesper Cockx wrote: > norm : {d : Delay? A i} {j : Size< i} > ? Delay? A j i (d .force) x ? later d ? now x Is there a reason for including a later constructor here? Is this to avoid extra proofs of now x ? now x? > data Delay? A i i? where > now? : ? x ? Delay? A i i? (now x) x > later? : {d : Delay? A i} {j : Size< i} > ? Delay? A j i? (d .force) x ? Delay? A i i? (later d) x I suppose that the second size could be omitted. -- /NAD From m.escardo at cs.bham.ac.uk Fri Apr 12 00:46:46 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Thu, 11 Apr 2019 23:46:46 +0100 Subject: [Agda] Two antagonistic definitions In-Reply-To: References: Message-ID: The following lectures notes discuss this kind of problem and how to address it: http://www.cs.bham.ac.uk/~mhe/dependent-equality-lecture/DependentEquality.html If after reading this you need further help, please ask and I'll be happy to discuss. Best, Martin On 11/04/2019 15:48, pierre.lescanne at ens-lyon.fr wrote: > Here is my problem. I set it in the Vec data structure, since it is a > well known. > > Assume that I want to define both ++ and another operation ++? > > > _++_ : ?{A : Set}{n m : ?} ? Vec A n ? Vec A m ? Vec A (n + m) > [] ++ v = v > (x ? v?) ++ v? = x ? (v? ++ v?) > > _++?_ : ?{A : Set}{n m : ?} ? Vec A n ? Vec A m ? Vec A (n + m) > v ++? [] = v > v? ++? (x ? v?) = (v? ?? x) ++? v? > > Agda does want to accept the second definition or the first if I use Vec > A (m + n) instead.?? How should I proceed ? > > Pierre Lescanne > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From asr at eafit.edu.co Fri Apr 12 14:40:42 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Fri, 12 Apr 2019 12:40:42 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0 Message-ID: Dear all, The Agda Team is very pleased to announce the release of Agda 2.6.0. * GHC supported versions Agda 2.6.0 has been tested with GHC 8.6.4, 8.4.4, 8.2.2, 8.0.2 and 7.10.3 on Linux, macOS and Windows. Note that this RC cannot be installed on Windows using GHC 8.6.3 due to a GHC bug. * Installation cabal update && cabal install Agda * Standard library A new version of the standard library will be announced soon. For the time being, you can use the upstream version of the library available at https://github.com/agda/agda-stlib/ * Highlights ** Added support for Cubical Agda (https://agda.readthedocs.io/en/v2.6.0/language/cubical.html) which adds new features such as univalence and higher inductive types to Agda. ** Added support for ML-style automatic generalization of variables (https://agda.readthedocs.io/en/v2.6.0/language/generalization-of-declared-variables.html). ** Added a new sort `Prop` of definitionally proof-irrelevant propositions (https://agda.readthedocs.io/en/v2.6.0/language/prop.html). ** The implementation of instance search (https://agda.readthedocs.io/en/v2.6.0/language/instance-arguments.html) got a major overhaul and no longer supports overlapping instances (unless enabled by a flag). * Complete list of language changes, incompatibilities and closed issues http://hackage.haskell.org/package/Agda-2.6.0/changelog Enjoy Agda 2.6.0. -- Andr?s on behalf of the Agda Team From matthewdaggitt at gmail.com Fri Apr 12 16:33:59 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Fri, 12 Apr 2019 22:33:59 +0800 Subject: [Agda] [ANNOUNCE] Standard library 1.0 Message-ID: Dear all, The Agda Team is very pleased to announce the release of the standard library 1.0. The library has been tested using Agda 2.6.0. The library, CHANGELOG and README are available at http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary As this is the first official *stable* release of the standard library, I and the team would like to take this moment to thank everyone for their patience! We know that we've made a fair few non-backwards compatible changes over the last couple of years, but we're now confident that the design of v1.0 will allow us to further extend the library without further large changes being necessary. Subsequent releases will strive to ensure backwards compatibility, and the main focus of v1.1 will be to increase the quality and quantity of documentation that accompanies the library. Enjoy the standard library 1.0. -- Matthew, on behalf of the Agda Team -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Sat Apr 13 21:05:07 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Sat, 13 Apr 2019 21:05:07 +0200 Subject: [Agda] Defining the Delay monad as a HIT in cubical agda In-Reply-To: <64D31B7E-A767-4F5E-89C3-DBBE55DAD444@nottingham.ac.uk> References: <801ec91d-f393-4992-aca3-97df0d481aa2@gmail.com> <64D31B7E-A767-4F5E-89C3-DBBE55DAD444@nottingham.ac.uk> Message-ID: <0750ebc2-6483-1c69-6ccd-41ae1237091a@cse.gu.se> On 03/04/2019 00.57, Thorsten Altenkirch wrote: > However, maybe one can define this coniductively instead of using > functions to describe chains. I'm wondering whether a definition along the lines of the following code (perhaps with some truncation constructors added) would work: mutual -- The partiality monad. data Partial (A : Set a) (i : Size) : Set a where now : A ? Partial A i later : Partial? A i ? Partial A i antisymmetry : ? {x y} ? [ i , i , i ] x ? y ? [ i , i , i ] y ? x ? x ? y record Partial? (A : Set a) (i : Size) : Set a where coinductive field force : {j : Size< i} ? Partial A j -- An ordering relation. infix 4 [_,_,_]_?_ [_,_,_]_??_ data [_,_,_]_?_ {A : Set a} (i j? j? : Size) : Partial A j? ? Partial A j? ? Set a where now : ? {x} ? [ i , j? , j? ] now x ? now x later? : ? {x? x?} ? ({j?? : Size< j?} ? [ i , j? , j?? ] x? ? x? .Partial?.force) ? [ i , j? , j? ] x? ? later x? later? : ? {x? x?} ? ({j?? : Size< j?} ? [ i , j?? , j? ] x? .Partial?.force ?? x?) ? [ i , j? , j? ] later x? ? x? record [_,_,_]_??_ {A : Set a} (i j? j? : Size) (x? : Partial A j?) (x? : Partial A j?) : Set a where coinductive field force : {j : Size< i} ? [ j , j? , j? ] x? ? x? However, I don't think I've ever managed to work productively with relations like the one above, where the related values are not necessarily fully defined (of size ?). -- /NAD From a.g.setzer at swansea.ac.uk Tue Apr 16 18:39:15 2019 From: a.g.setzer at swansea.ac.uk (Setzer A.G.) Date: Tue, 16 Apr 2019 16:39:15 +0000 Subject: [Agda] summer school of proof society with proof theory of Martin-Loef Type Theory Message-ID: Dear all, the following summer school on proof theory which includes lectures on proof theory of Martin-Loef Type Theory by myself might be of interest to Agda people. There is as well a workshop 11 - 13 September with contributed talks =================================================================================== 2nd International Summer School on Proof Theory Swansea, September 8-11, 2019 http://www.proofsociety.org/summer-school-2019/ Deadline for registration: 1 July 2019 Colocated with the Summer School is the 2nd Workshop on Proof Theory and its Applications Swansea, September 11-13, 2019 http://www.proofsociety.org/workshop-2019/ Deadline for registration: 15 July 2019 Important dates =============== 1 July 2019: Summer School application deadline 15 July 2019: Workshop registration and submission of contributed talks deadline 8-11 September 2019: Summer School 11-13 September 2019: Workshop Mission and scientific aims of the Summer School ================================================ The mission of The Proof Society is to support the notion of proof in its broadest sense, through a series of suitable activities; to be therefore inclusive in reaching out to all scientific areas which consider proof as an object in their studies; to enable the community to shape its future by identifying, formulating and communicating it most important goals; to actively promote proof to increase its visibility and representation. The aim of the Proof Society Summer School is to cover basic and advanced topics in proof theory. The focus of the second edition will be on philosophy of proof theory, proof theory of impredicative theories, structural proof theory, proof mining, reverse mathematics, type theory and bounded arithmetic. The intended audience for the Summer School is advanced master students, PhD students postdocs and experienced researchers new to the field in mathematics, computer science and philosophy. The 1st Workshop and International Summer School on Proof Theory took place in Ghent in 2018. Speakers at the Summer School ============================= Rosalie Iemhoff (Utrecht University) - Universal Proof Theory Wolfram Pohlers (University of Munster) - Ordinal Analysis and Proof Theory of Impredicative Theories Paola Bruscoli (University of Bath) - Structural Proof Theory Paulo Oliva (Queen Mary University of London) - Proof mining and functional interpretation Takako Nemoto (Japan Advanced Institute of Science and Technology) - Reverse Mathematics Anton Setzer (Swansea University) - Proof Theory of Martin-Loef Type Theory Arnold Beckmann (Swansea University) - Bounded Arithmetic Registration ============ To register follow the instructions on the website. The deadline for registration is 1 July 2019. Student Grants ========== A limited number of grants for UK PhD and Research Master students is available. The grants are sponsored by the London Mathematical Society and will be awarded on a first-come-first-serve basis. Further details on the website. Venue ===== Summer School and Workshop will take place in the Computational Foundry on the Bay Campus of Swansea University and will be hosted by the Department of Computer Science. Programme Committee =================== Bahareh Afshari, University of Gothenburg Matthias Baaz, TU Wien Arnold Beckmann, Swansea University (Chair) Lev Beklemishev, Steklov Mathematical Institute Ulrich Berger, Swansea University Balthasar Grabmayr, Humboldt University Berlin Rosalie Iemhoff, Utrecht University Joost Joosten, University of Barcelona Antonina Kolokolova, Memorial University of Newfoundland Norbert Preining, Accelia Inc. Monika Seisenberger, Swansea University Anton Setzer, Swansea University Andreas Weiermann, Ghent University Local organizing committee ========================== Arnold Beckmann, Swansea University Ulrich Berger, Swansea University (Co-chair) Anton Setzer, Swansea University (Co-chair) Monika Seisenberger, Swansea University Accommodation ============= A limited number of ensuite on-campus accommodation (GBP 50 per night) has been reserved for the Summer School and the Workshop. To book contact the local organizers asap. ========================================================================================= Anton Setzer -------------- next part -------------- An HTML attachment was scrubbed... URL: From dankoilik at gmail.com Wed Apr 17 09:33:10 2019 From: dankoilik at gmail.com (Danko Ilik) Date: Wed, 17 Apr 2019 09:33:10 +0200 Subject: [Agda] CIFRE PhD thesis position in Siemens Mobility, Chatillon Message-ID: SUBJECT Optimization of source code for safety-critical systems SUPERVISORS ? Thesis supervisors: ? Danko Ilik at Siemens Mobility ? Lutz Strassburger at LIX, Ecole Polytechnique CONTEXT The research work on the thesis will take place at Siemens Mobility in Chatillon, France, a division providing the computer systems (hardware and software) for many on the World's automatic metros. Being safety-critical, our computer systems are certified according to the norm EN 50126/50128/50129. To achieve the highest safety integrity level (SIL4), for some of our components, we use formal methods based on mathematical proof and programming languages technology. We are one of the pioneers of using such methods in industry, with our work on Paris's line 14. The use of formal methods in large and real-life projects poses interesting challenges for the optimization of execution time of software derived using the formal methods. OBJECTIVES The goal of the thesis will be to develop ways to optimize the performance of software, while not sacrificing the guarantees of safety already provided for non-optimized code. It is expected that the PhD candidate will implement the methods discovered, and that a certification according to the relevant safety norms be prepared for the implementation. Necessarily going beyond the state-of-the-art, the candidate is expected to obtain an independent confirmation of the novelty of her/his results (in form of a scientific publication or patent) and write a PhD thesis that she/he will defend. QUALIFICATIONS The PhD candidate should preferably have a previous training or a first research experience in 2 of the following 3 areas: ? programming languages topics, such as functional programming, compiler construction or semantics of programming languages; ? proof formalization, i.e., knowledge of proof assistants (Coq, Agda, Isabelle, etc.); ? computer architecture, especially topics about out-of-order execution of modern CPUs (cache behaviour, branch prediction, etc.). EMPLOYMENT TERMS The PhD researcher will be engaged under a 3-year work contract (French CDD) at Siemens Mobility in Chatillon. The start of the PhD thesis and the work contract may be conditioned by the fulfillment of the Qualification and ZRR admission procedures of the doctoral school (Ecole Polytechnique, Palaiseau). ADMISSION PROCEDURE The application can be submitted at the Siemens Mobility web site, at the address: https://jobs.siemens-info.com/jobs/66150?lang=en-gb We encourage candidates to send their application ASAP. From fredrik.nordvall-forsberg at strath.ac.uk Thu Apr 18 15:55:02 2019 From: fredrik.nordvall-forsberg at strath.ac.uk (Fredrik Nordvall Forsberg) Date: Thu, 18 Apr 2019 14:55:02 +0100 Subject: [Agda] Postdoctoral position in Compositional Game Theory at Univ. of Strathclyde Message-ID: <20b9dabb-74a9-8808-7e9b-e85b21155b07@strath.ac.uk> The University of Strathclyde is looking to recruit a full-time postdoctoral researcher to work on the project "Compositional Game Theory" with Professor Neil Ghani, Dr Clemens Kupke and Dr Fredrik Nordvall Forsberg. Duration: initially 1 year, with possible extension to 4 years Salary: ?32236 - ?3960 Start: 1 August 2019 or soon thereafter Deadline: 25 May 2019 Interested candidates should contact Professor Neil Ghani (ng at cis.strath.ac.uk) in the first instance. Applicants must hold or be about to receive a doctoral degree in Computer Science or Mathematics or Economic Game Theory, and have a strong background in one or more of the following areas: * Category theory * Programming languages * Type Theory * Economic Game Theory The successful applicant will focus on developing foundational theory to support Compositional Game Theory and/or applications of Compositional Game Theory to real world applications. This includes collaborating with project partners and members, including PhD students. The position lies within the MSP group (http://msp.cis.strath.ac.uk/) consisting of Neil Ghani, Conor McBride, Clemens Kupke, Ross Duncan, Bob Atkey and Fredrik Nordvall Forsberg. From liang.ting.chen.tw at gmail.com Sat Apr 20 22:39:33 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Sat, 20 Apr 2019 22:39:33 +0200 Subject: [Agda] How to obtain the reflected goal? Message-ID: Hi all, Based on Language Reference, I expect that the following fragment macro showGoal : Term ? TC ? showGoal hole = (inferType hole) >>= ? goal ? typeError [ termErr goal ] binds the reflected goal to `goal`, but I always get a meta-variable instead even if the goal is simply ?. Is this the expected behaviour? -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Sun Apr 21 08:52:20 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Sun, 21 Apr 2019 08:52:20 +0200 Subject: [Agda] How to obtain the reflected goal? In-Reply-To: References: Message-ID: Can you give a complete example? The following works: open import Agda.Builtin.Reflection renaming (bindTC to _>>=_) open import Agda.Builtin.Unit open import Agda.Builtin.List open import Agda.Builtin.Nat macro showGoal : Term ? TC ? showGoal hole = inferType hole >>= ? goal ? typeError (termErr goal ? []) test : Nat test = showGoal -- Error: -- Nat -- when checking ... In general if you encounter a meta that you can't handle in a tactic you can call `blockOnMeta`, which causes the tactic to be aborted and rerun once the meta is solved. / Ulf On Sat, Apr 20, 2019 at 10:39 PM Liang-Ting Chen < liang.ting.chen.tw at gmail.com> wrote: > Hi all, > > Based on Language Reference, I expect that the following fragment > > macro > showGoal : Term ? TC ? > showGoal hole = > (inferType hole) >>= ? goal ? typeError [ termErr goal ] > > > binds the reflected goal to `goal`, but I always get a meta-variable > instead even if the goal is simply ?. Is this the expected behaviour? > > -- > Best regards, > Liang-Ting > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From liang.ting.chen.tw at gmail.com Sun Apr 21 09:19:00 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Sun, 21 Apr 2019 09:19:00 +0200 Subject: [Agda] How to obtain the reflected goal? In-Reply-To: References: Message-ID: Aha, I see. Your example also works for me. I tried the following instead ... test : ? test = {!showGoal!} ... so I only got the type of `{! ... !}`. In this case, is it possible to get `?` directly while working inside a hole? -- Liang-Ting On Sun, 21 Apr 2019 at 08:52, Ulf Norell wrote: > Can you give a complete example? The following works: > > open import Agda.Builtin.Reflection renaming (bindTC to _>>=_) > open import Agda.Builtin.Unit > open import Agda.Builtin.List > open import Agda.Builtin.Nat > > macro > showGoal : Term ? TC ? > showGoal hole = > inferType hole >>= ? goal ? typeError (termErr goal ? []) > > test : Nat > test = showGoal > -- Error: > -- Nat > -- when checking ... > > In general if you encounter a meta that you can't handle in a tactic you > can call `blockOnMeta`, which causes > the tactic to be aborted and rerun once the meta is solved. > > / Ulf > > On Sat, Apr 20, 2019 at 10:39 PM Liang-Ting Chen < > liang.ting.chen.tw at gmail.com> wrote: > >> Hi all, >> >> Based on Language Reference, I expect that the following fragment >> >> macro >> showGoal : Term ? TC ? >> showGoal hole = >> (inferType hole) >>= ? goal ? typeError [ termErr goal ] >> >> >> binds the reflected goal to `goal`, but I always get a meta-variable >> instead even if the goal is simply ?. Is this the expected behaviour? >> >> -- >> Best regards, >> Liang-Ting >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Sun Apr 21 09:36:10 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Sun, 21 Apr 2019 09:36:10 +0200 Subject: [Agda] How to obtain the reflected goal? In-Reply-To: References: Message-ID: Use C-c C-; ( https://agda.readthedocs.io/en/v2.6.0/tools/emacs-mode.html#commands-in-context-of-a-goal ) / Ulf On Sun, Apr 21, 2019 at 9:19 AM Liang-Ting Chen < liang.ting.chen.tw at gmail.com> wrote: > Aha, I see. Your example also works for me. I tried the following instead > ... > test : ? > test = {!showGoal!} > ... > so I only got the type of `{! ... !}`. In this case, is it possible to get > `?` directly while working inside a hole? > > > -- Liang-Ting > > On Sun, 21 Apr 2019 at 08:52, Ulf Norell wrote: > >> Can you give a complete example? The following works: >> >> open import Agda.Builtin.Reflection renaming (bindTC to _>>=_) >> open import Agda.Builtin.Unit >> open import Agda.Builtin.List >> open import Agda.Builtin.Nat >> >> macro >> showGoal : Term ? TC ? >> showGoal hole = >> inferType hole >>= ? goal ? typeError (termErr goal ? []) >> >> test : Nat >> test = showGoal >> -- Error: >> -- Nat >> -- when checking ... >> >> In general if you encounter a meta that you can't handle in a tactic you >> can call `blockOnMeta`, which causes >> the tactic to be aborted and rerun once the meta is solved. >> >> / Ulf >> >> On Sat, Apr 20, 2019 at 10:39 PM Liang-Ting Chen < >> liang.ting.chen.tw at gmail.com> wrote: >> >>> Hi all, >>> >>> Based on Language Reference, I expect that the following fragment >>> >>> macro >>> showGoal : Term ? TC ? >>> showGoal hole = >>> (inferType hole) >>= ? goal ? typeError [ termErr goal ] >>> >>> >>> binds the reflected goal to `goal`, but I always get a meta-variable >>> instead even if the goal is simply ?. Is this the expected behaviour? >>> >>> -- >>> Best regards, >>> Liang-Ting >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> > > -- > Best regards, > Liang-Ting > -------------- next part -------------- An HTML attachment was scrubbed... URL: From liang.ting.chen.tw at gmail.com Sun Apr 21 09:40:01 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Sun, 21 Apr 2019 09:40:01 +0200 Subject: [Agda] How to obtain the reflected goal? In-Reply-To: References: Message-ID: It works. Thank you so much! -- Liang-Ting On Sun, 21 Apr 2019 at 09:36, Ulf Norell wrote: > Use C-c C-; > > ( > https://agda.readthedocs.io/en/v2.6.0/tools/emacs-mode.html#commands-in-context-of-a-goal > ) > > / Ulf > > On Sun, Apr 21, 2019 at 9:19 AM Liang-Ting Chen < > liang.ting.chen.tw at gmail.com> wrote: > >> Aha, I see. Your example also works for me. I tried the following instead >> ... >> test : ? >> test = {!showGoal!} >> ... >> so I only got the type of `{! ... !}`. In this case, is it possible to >> get `?` directly while working inside a hole? >> >> >> -- Liang-Ting >> >> On Sun, 21 Apr 2019 at 08:52, Ulf Norell wrote: >> >>> Can you give a complete example? The following works: >>> >>> open import Agda.Builtin.Reflection renaming (bindTC to _>>=_) >>> open import Agda.Builtin.Unit >>> open import Agda.Builtin.List >>> open import Agda.Builtin.Nat >>> >>> macro >>> showGoal : Term ? TC ? >>> showGoal hole = >>> inferType hole >>= ? goal ? typeError (termErr goal ? []) >>> >>> test : Nat >>> test = showGoal >>> -- Error: >>> -- Nat >>> -- when checking ... >>> >>> In general if you encounter a meta that you can't handle in a tactic you >>> can call `blockOnMeta`, which causes >>> the tactic to be aborted and rerun once the meta is solved. >>> >>> / Ulf >>> >>> On Sat, Apr 20, 2019 at 10:39 PM Liang-Ting Chen < >>> liang.ting.chen.tw at gmail.com> wrote: >>> >>>> Hi all, >>>> >>>> Based on Language Reference, I expect that the following fragment >>>> >>>> macro >>>> showGoal : Term ? TC ? >>>> showGoal hole = >>>> (inferType hole) >>= ? goal ? typeError [ termErr goal ] >>>> >>>> >>>> binds the reflected goal to `goal`, but I always get a meta-variable >>>> instead even if the goal is simply ?. Is this the expected behaviour? >>>> >>>> -- >>>> Best regards, >>>> Liang-Ting >>>> _______________________________________________ >>>> Agda mailing list >>>> Agda at lists.chalmers.se >>>> https://lists.chalmers.se/mailman/listinfo/agda >>>> >>> >> >> -- >> Best regards, >> Liang-Ting >> > -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Tue Apr 23 04:29:31 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Tue, 23 Apr 2019 10:29:31 +0800 Subject: [Agda] [ ANNOUNCE ] Standard Library v1.0.1 Message-ID: Dear all, The Agda Team is very pleased to announce the release of the standard library 1.0.1. The library has been tested using Agda 2.6.0. The library, CHANGELOG and README are available at http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary This release fixes a bug in `Relation.Binary.Reasoning.MultiSetoid` that resulted in unsolved metas. Enjoy the standard library 1.0.1. -- Matthew, on behalf of the Agda Team -------------- next part -------------- An HTML attachment was scrubbed... URL: From chantal.keller at wanadoo.fr Tue Apr 23 19:23:54 2019 From: chantal.keller at wanadoo.fr (Chantal Keller) Date: Tue, 23 Apr 2019 19:23:54 +0200 Subject: [Agda] PxTP 2019 - 2nd Call for Papers Message-ID: <4a0fcec6-619c-375a-2708-f90b6788278f@wanadoo.fr> [Please accept our apologies for duplicates] ============================================== Second Call for Papers, PxTP 2019 The Sixth International Workshop on Proof eXchange for Theorem Proving (PxTP) http://pxtp.gforge.inria.fr/2019/ 25-26 August 2019, Natal, Brazil associated with the CADE-27 conference ## Background The PxTP workshop brings together researchers working on various aspects of communication, integration, and cooperation between reasoning systems and formalisms. The progress in computer-aided reasoning, both automatic and interactive, during the past decades, has made it possible to build deduction tools that are increasingly more applicable to a wider range of problems and are able to tackle larger problems progressively faster. In recent years, cooperation of such tools in larger verification environments has demonstrated the potential to reduce the amount of manual intervention. Examples include the Sledgehammer tool providing an interface between Isabelle and (untrusted) automated provers, and collaboration of the HOL Light and Isabelle systems in the formal proof of the Kepler conjecture. Cooperation between reasoning systems relies on availability of theoretical formalisms and practical tools for exchanging problems, proofs, and models. The PxTP workshop strives to encourage such cooperation by inviting contributions on suitable integration, translation, and communication methods, standards, protocols, and programming interfaces. The workshop welcomes developers of automated and interactive theorem proving tools, developers of combined systems, developers and users of translation tools and interfaces, and producers of standards and protocols. We are interested both in success stories and descriptions of current bottlenecks and proposals for improvement. ## Topics Topics of interest for this workshop include all aspects of cooperation between reasoning tools, whether automatic or interactive. More specifically, some suggested topics are: * applications that integrate reasoning tools (ideally with certification of the result); * interoperability of reasoning systems; * translations between logics, proof systems, models; * distribution of proof obligations among heterogeneous reasoning tools; * algorithms and tools for checking and importing (replaying, reconstructing) proofs; * proposed formats for expressing problems and solutions for different classes of logic solvers (SAT, SMT, QBF, first-order logic, higher-order logic, typed logic, rewriting, etc.); * meta-languages, logical frameworks, communication methods, standards, protocols, and APIs related to problems, proofs, and models; * comparison, refactoring, transformation, migration, compression and optimization of proofs; * data structures and algorithms for improved proof production in solvers (e.g., efficient proof representations); * (universal) libraries, corpora and benchmarks of proofs and theories; * alignment of diverse logics, concepts and theories across systems and libraries; * engineering aspects of proofs (e.g., granularity, flexiformality, persistence over time); * proof certificates; * proof checking; * mining of (mathematical) information from proofs (e.g., quantifier instantiations, unsat cores, interpolants, ...); * reverse engineering and understanding of formal proofs; * universality of proofs (i.e. interoperability of proofs between different proof calculi); * origins and kinds of proofs (e.g., (in)formal, automatically generated, interactive, ...) * Hilbert's 24th Problem (i.e. what makes a proof better than another?); * social aspects (e.g., community-wide initiatives related to proofs, cooperation between communities, the future of (formal) proofs); * applications relying on importing proofs from automatic theorem provers, such as certified static analysis, proof-carrying code, or certified compilation; * application-oriented proof theory; * practical experiences, case studies, feasibility studies. ## Submissions Researchers interested in participating are invited to submit either an extended abstract (up to 8 pages) or a regular paper (up to 15 pages). Submissions will be refereed by the program committee, which will select a balanced program of high-quality contributions. Short submissions that could stimulate fruitful discussion at the workshop are particularly welcome. We expect that one author of every accepted paper will present their work at the workshop. Submitted papers should describe previously unpublished work, and must be prepared using the LaTeX EPTCS class (http://style.eptcs.org/). Papers will be submitted via EasyChair, at the PxTP'2019 workshop page (https://easychair.org/conferences/?conf=pxtp2019). Accepted regular papers will appear in an EPTCS volume. # Important Dates * Abstract submission: May 12, 2019 * Paper submission: May 19, 2019 * Notification: June 21, 2019 * Camera ready versions due: July 14, 2019 * Workshop: 25-26 August 2019 ## Invited Speakers TBA ## Program Committee * Haniel Barbosa (University of Iowa), co-chair * Giselle Reis (Carnegie Mellon University), co-chair * Roberto Blanco, Inria, France * Fr?d?ric Blanqui, Inria, France * Simon Cruanes, Aesthetic Integration, USA * Catherine Dubois, ENSIIE, France * Amy Felty, University of Ottawa, Canada * Mathias Fleury, Max-Planck-Institut f?r Informatik, Germany * St?phane Graham-Lengrand, SRI, USA * Cezary Kaliszyk, University of Innsbruck, Austria * Chantal Keller, LRI, Universit? Paris-Sud, France * Laura Kov?cs, TU Wien, Austria * Olivier Laurent, CNRS, ENS Lyon, France * Stefan Mitsch, Carnegie Mellon University, USA * Carlos Olarte, UFRN, Brazil * Bruno Woltzenlogel Paleo, IOHK, Australia * Florian Rabe, LRI, Universit? Paris-Sud, France * Martin Riener, University of Manchester, UK * Geoff Sutcliffe, University of Miami, USA * Josef Urban, Czech Institute of Informatics, Robotics and Cybernetics (CIIRC), Czech Republic * Yoni Zohar, Stanford University, USA ## Previous PxTP Editions * PxTP 2017 (https://pxtp.github.io/2017/), affiliated to Tableaux 2017, FroCoS 2017 and ITP 2017 * PxTP 2015 (http://pxtp15.lri.fr/), affiliated to CADE-25 * PxTP 2013 (http://www.cs.ru.nl/pxtp13/), affiliated to CADE-24 * PxTP 2012 (http://pxtp2012.inria.fr/), affiliated to IJCAR 2012 * PxTP 2011 (http://pxtp2011.loria.fr/), affiliated to CADE-23 From joshs at mail2000.com.tw Wed Apr 24 15:14:26 2019 From: joshs at mail2000.com.tw (Josh Ko) Date: Wed, 24 Apr 2019 22:14:26 +0900 Subject: [Agda] Bx 2019 Call for Participation Message-ID: <56071641-C57B-4BA9-B86C-47DD6A58633D@mail2000.com.tw> Bx 2019 Call for Participation ============================== Highlights ---------- * Invited speaker: Zack Ives on Views, Update Propagation, and Provenance * Registration information (early deadline: May 4) * List of accepted papers and talks General Information ------------------- * 8th International Workshop on Bidirectional Transformations * http://bx-community.wikidot.com/bx2019:home * June 4, 2019, Saint Joseph?s University, Philadelphia, PA, USA * as part of the Philadelphia Logic Week (PLW) 2019: https://sites.sju.edu/plw/ Bidirectional transformations (bx) are a mechanism for maintaining the consistency of at least two related sources of information. Such sources can be relational databases, software models and code, or any other document following standard or ad hoc formats. Bx are an emerging topic in a wide range of research areas, with prominent presence at top conferences in several different fields (namely databases, programming languages, software engineering, and graph transformation), but with results in one field often getting limited exposure in the others. Bx 2019 is a dedicated venue for bx in all relevant fields, and is part of a workshop series that was created in order to promote cross-disciplinary research and awareness in the area. As such, since its beginning in 2012, the workshop has rotated between venues in different fields. Bx 2019 will be a part of Philadelphia Logic Week (PLW) 2019, which also includes conference and workshops on logic, provenance, and databases, topics that we hope will complement Bx and help build engagement with these communities. Registration ------------ * https://sites.sju.edu/plw/plw-2019-registration/ * Early registration deadline: May 4 * Passes available for attending multiple co-located events, including LPNMR (Logic Programming and Nonmonotonic Reasoning) and workshops, Datalog 2.0 (Resurgence of Datalog in Academia and Industry), and TaPP (Theory and Practice of Provenance) * Opportunities for students to receive financial support from the LPNMR Doctoral Consortium Invited Talk ------------ * Views, Update Propagation, and Provenance Zachary Ives (University of Pennsylvania) http://www.cis.upenn.edu/~zives/ Accepted Papers and Talks ------------------------- The abstracts can be found at http://bx-community.wikidot.com/bx2019:accepted . * ASN.1 Encoding Schemes Done Right Using CMPCT Mark Tullsen (Galois, Inc.) * Lenses and Learners Brendan Fong (Massachusetts Institute of Technology) and Michael Johnson (Macquarie University) * Multicategories of Multiary Lenses Michael Johnson (Macquarie University) and Robert Rosebrugh (Mount Allison University) * Incremental Bidirectional Model Transformation with eMoflon::IBeX (Tool Paper) Nils Weidmann (Paderborn University), Anthony Anjorin (Paderborn University), Lars Fritsche (TU Darmstadt), Gergely Varr?, Andy Sch?rr (TU Darmstadt), and Erhan Leblebici (TU Darmstadt) * A Bidirectional Krivine Machine (Short Paper) Mikael Mayer (University of Chicago) and Ravi Chugh (University of Chicago) * Consistent Runtime Adaptation of User Interfaces (Short Paper) Anthony Anjorin (Paderborn University), Enes Yigitbas (Paderborn University), and Hermann Kaindl (Vienna University of Technology) * Symmetric d-Lenses and Symmetric c-Lenses are not Coextensive (Short Paper) Michael Johnson (Macquarie University) and Fran?ois Renaud (Universit? Catholique de Louvain) * A Toolbox of Lenses: Dimensions of the Lens Design Space (Talk) Zinovy Diskin (McMaster University) * Expanding the Power of Lens Synthesis (Talk) Anders Miltner (Princeton University), Solomon Maina (University of Pennsylvania), Kathleen Fisher (Tufts University), Benjamin Pierce (University of Pennsylvania), David Walker (Princeton University), and Steve Zdancewic (University of Pennsylvania) * Optics and Type Equivalences (Talk) Jacques Carette (McMaster University) and Amr Sabry (Indiana University Bloomington) * Reified Correspondences: A New Component of the Multiary Delta Lenses Framework (Talk) Zinovy Diskin (McMaster University) From A.Popescu at mdx.ac.uk Thu Apr 25 13:59:33 2019 From: A.Popescu at mdx.ac.uk (Andrei Popescu) Date: Thu, 25 Apr 2019 11:59:33 +0000 Subject: [Agda] FroCoS 2019 (London): DEADLINE EXTENSION and final call for papers Message-ID: FroCoS 2019 The 12th International Symposium on Frontiers of Combining Systems London, UK, September 4-6, 2019 Website: https://www.frocos2019.org Contact: chair at frocos2019.org Due to requests from potential authors and from current authors wishing to polish their papers, we have extended the submission deadlines. The new deadlines are: 1 May 2019 (abstract), 8 May 2019 (paper) Authors who have a good paper and are in doubt whether to send it to FroCoS may note some highlights of this year's edition: two affiliated workshops, two affiliated tutorials, two financially supported best paper awards including one for junior researchers, five outstanding invited speakers (to be announced soon) and some support for junior researchers traveling to the conference (including widely available cheap accommodation). We hope to see many of you this September in London -- in the beautiful campus of the Middlesex University, located 40 minutes from the city center and 20 minutes from Camden Town's iconic music venues! GENERAL INFORMATION The 12th International Symposium on Frontiers of Combining Systems (FroCoS 2019) will take place in London. It will be hosted by the Department of Computer Science at the Middlesex University London, from 4 to 6 September 2019. FroCoS is the main international event for research on the development of techniques and methods for the combination and integration of formal systems, their modularization and analysis. The first FroCoS symposium was held in Munich, Germany, in 1996. Initially held every two years, since 2004 it has been organized annually with alternate years forming part of IJCAR. If we also count the IJCAR editions, this year FroCoS celebrates its 20th edition. FroCoS 2019 will be co-located with the 28th International Conference on Automated Reasoning with Analytic Tableaux and Related Methods (TABLEAUX 2019). The two conferences will provide a rich programme of workshops, tutorials, invited talks, paper presentations and system descriptions. SCOPE OF CONFERENCE In various areas of computer science, such as logic, computation, program development and verification, artificial intelligence, knowledge representation, and automated reasoning, there is an obvious need for using specialized formalisms and inference systems for selected tasks. To be usable in practice, these specialized systems must be combined with each other and integrated into general purpose systems. This has led to the development of techniques and methods for the combination and integration of dedicated formal systems, as well as for their modularization and analysis. FroCoS traditionally focuses on these types of research questions and activities. Like its predecessors, FroCoS 2019 seeks to offer a common forum for research in the general area of combination, modularization, and integration of systems, with emphasis on logic-based methods and their practical use. Topics of interest for FroCoS 2019 include (but are not restricted to): * combinations of logics (such as higher-order, first-order, temporal, modal, description or other non-classical logics) * combination and integration methods in SAT and SMT solving * combination of decision procedures, satisfiability procedures, constraint solving techniques, or logical frameworks * combination of logics with probability and/or fuzzy measures * combinations and modularity in ontologies * integration of equational and other theories into deductive systems * hybrid methods for deduction, resolution and constraint propagation * hybrid systems in knowledge representation and natural language semantics * combined logics for distributed and multi-agent systems * logical aspects of combining and modularizing programs and specifications * integration of data structures into constraint logic programming and deduction * combinations and modularity in term rewriting * methods and techniques for the verification and analysis of information systems * methods and techniques for combining logical reasoning with machine learning SUBMISSION GUIDELINES The program committee seeks high-quality submissions describing original work, written in English, not overlapping with published or simultaneously submitted work to a journal or conference with archival proceedings. Selection criteria include accuracy and originality of ideas, clarity and significance of results, and quality of presentation. The page limit in Springer LNCS style is 16 pages in total, including references and figures. Any additional material (going beyond the page limit) can be included in a clearly marked appendix. This appendix will be read at the discretion of the committee, and must be removed for the camera-ready version. Papers must be edited in LaTeX using the llncs style and must be submitted electronically as PDF files via EasyChair at https://easychair.org/conferences/?conf=frocos2019 For each accepted paper, at least one of the authors is required to attend the conference and present the work. Prospective authors must register a title and an abstract three days before the paper submission deadline. Formatting instructions and the LNCS style files can be obtained at http://www.springer.com/br/computer-science/lncs/conference-proceedings-guidelines IMPORTANT DATES Abstract submission: 1 May 2019 Paper submission: 8 May 2019 Notification of paper decisions: 6 Jun 2019 Camera-ready papers due: 1 Jul 2019 FroCoS conference: 4-6 Sep 2019 PUBLICATION DETAILS The conference proceedings will be published in the Springer series Lecture Notes in Artificial Intelligence (LNAI/LNCS). BEST PAPER AWARDS The program committee will select the FroCoS 2019 Best Paper, which will be awarded 500 Euros. In addition to that, the committee will select the FroCoS 2019 Best Paper by a Junior Researcher, which will be awarded 250 Euros. Researchers will be considered junior if either they are students or their PhD award date is less than two years from the first day of the meeting, 4 September 2019. "Paper by a Junior Researcher" means that the paper's main author is junior, or the paper's main authors are all junior. For a paper to qualify, this information must be indicated in the pdf submission by adding an asterisk (*) at both the title and the main-author name(s). SUPPORT FOR STUDENT AND YOUNG RESEARCHER PARTICIPATION We have some limited funding for supporting students and young researchers traveling to the conference -- courtesy of direct sponsorship from Amazon and Springer and indirect sponsorship from the Association for Symbolic Logic. In addition, some funding will be available through the EUTypes COST action website. In all cases, authors of accepted papers will be given precedence. Please see the conference website for more details. In addition, the Middlesex University is offering accommodation at a ?30 daily rate in some excellently maintained shared flats located close to the conference venue (https://www.mdx.ac.uk/student-life/accommodation/platt-hall). AFFILIATED EVENTS (COMMON WITH TABLEAUX) WORKSHOPS: * The 25th Workshop on Automated Reasoning (ARW 2019, http://arw.csc.liv.ac.uk) Organizers: Florian Kammueller (Middlesex University) and Alexander Bolotov (University of Westminster) * Journeys in Computational Logic: Tributes to Roy Dyckhoff Organizers: St?phane Graham-Lengrand (SRI International), Ekaterina Komendantskaya (Heriot-Watt University) and Mehrnoosh Sadrzadeh (Queen Mary University of London) TUTORIALS: * Formalising concurrent computation: CLF, Celf, and applications (joint FroCoS/TABLEAUX tutorial). Presenters: Sonia Marin (IT-University of Copenhagen), Giselle Reis (Carnegie Mellon University in Qatar) and Iliano Cervesato (Carnegie Mellon University) * How to Build an Automated Theorem Prover - An Introductory Tutorial (invited TABLEAUX tutorial). Presenter: Jens Otten (University of Oslo) PROGRAM COMMITTEE Carlos Areces, FaMAF - Universidad Nacional de C?rdoba, Argentina Alessandro Artale, Free University of Bolzano-Bozen, Italy Franz Baader, TU Dresden, Germany Christoph Benzm?ller, Free University of Berlin, Germany Jasmin Christian Blanchette, Vrije Universiteit Amsterdam, Netherlands Torben Bra?ner, Roskilde University, Denmark Clare Dixon, University of Liverpool, UK Marcelo Finger, University of S?o Paulo, Brazil Pascal Fontaine, LORIA, INRIA, University of Lorraine, France Didier Galmiche, LORIA, University of Lorraine, France Silvio Ghilardi, Universit? degli Studi di Milano, Italy J?rgen Giesl, RWTH Aachen, Germany Andreas Herzig, CNRS, IRIT, France Moa Johansson, Chalmers University, Sweden Jean Christoph Jung, University of Bremen, Germany Cezary Kaliszyk, University of Innsbruck, Austria Ekaterina Komendantskaya, Heriot-Watt University, UK Roman Kontchakov, Birkbeck, University of London, UK Alessio Lomuscio, Imperial College London, UK Assia Mahboubi, INRIA, France Stefan Mitsch, Carnegie Mellon University Cl?udia Nalon, University of Bras?lia, Brazil Andrei Popescu, Middlesex University London, UK Silvio Ranise, Fondazione Bruno Kessler-Irst, Italy Christophe Ringeissen, LORIA-INRIA, France Philipp R?mmer, Uppsala University, Sweden Renate Schmidt, University of Manchester, UK Viorica Sofronie-Stokkermans, University Koblenz-Landau, Germany Christian Sternagel, University of Innsbruck, Austria Andrzej Szalas, Link?ping University, Sweden Cesare Tinelli, University of Iowa, US Ashish Tiwari, SRI International, US Christoph Weidenbach, Max Planck Institute for Informatics, Germany PC CHAIRS Andreas Herzig, CNRS, IRIT, France Andrei Popescu, Middlesex University London, UK LOCAL ORGANIZATION COMMITTEE Kelly Androutsopoulos, Middlesex University London, UK Jaap Boender, Middlesex University London, UK Michele Bottone, Middlesex University London, UK Florian Kammueller, Middlesex University London, UK Rajagopal Nagarajan, Middlesex University London, UK Andrei Popescu, Middlesex University London, UK Franco Raimondi, Middlesex University London, UK LOCAL ORGANIZATION CHAIR Franco Raimondi, Middlesex University London, UK -------------- next part -------------- An HTML attachment was scrubbed... URL: From A.Popescu at mdx.ac.uk Thu Apr 25 14:03:16 2019 From: A.Popescu at mdx.ac.uk (Andrei Popescu) Date: Thu, 25 Apr 2019 12:03:16 +0000 Subject: [Agda] TABLEAUX 2019 (London): DEADLINE EXTENSION and final call for papers Message-ID: TABLEAUX 2019 The 28th International Conference on Automated Reasoning with Analytic Tableaux and Related Methods London, UK, September 3-5, 2019 Website: https://www.tableaux2019.org Contact: chair at tableaux2019.org Due to requests from potential authors and from current authors wishing to polish their papers, we have extended the submission deadlines. The new deadlines are: 1 May 2019 (abstract), 8 May 2019 (paper) Authors who have a good paper and are in doubt whether to send it to TABLEAUX may note some highlights of this year's edition: two affiliated workshops, two affiliated tutorials, a financially supported best paper award for young researchers, five outstanding invited speakers (to be announced soon) and some support for young researchers traveling to the conference (including widely available cheap accommodation). We hope to see many of you this September in London -- in the beautiful campus of the Middlesex University, located 40 minutes from the city center and 20 minutes from Camden Town's iconic music venues! GENERAL INFORMATION The 28th International Conference on Automated Reasoning with Analytic Tableaux and Related Methods (TABLEAUX 2019) will take place in London. It will be hosted by the Department of Computer Science at the Middlesex University London, on 3-5 September 2019. TABLEAUX is the main international conference at which research on all aspects -- theoretical foundations, implementation techniques, systems development and applications -- of the mechanization of tableaux-based reasoning and related methods is presented. The first TABLEAUX conference was held in Lautenbach near Karlsruhe, Germany, in 1992. Since then it has been organized on an annual basis; in 2001, 2004, 2006, 2008, 2010, 2012, 2014, 2016 and 2018 as a constituent of IJCAR. TABLEAUX 2019 will be co-located with the 12th International Symposium on Frontiers of Combining Systems (FroCoS 2019). The conferences will provide a rich programme of workshops, tutorials, invited talks, paper presentations and system descriptions. SCOPE OF CONFERENCE Tableau methods offer a convenient and flexible set of tools for automated reasoning in classical logic, extensions of classical logic, and a large number of non-classical logics. For many logics, tableau methods can be generated automatically. Areas of application include verification of software and computer systems, deductive databases, knowledge representation and its required inference engines, teaching, and system diagnosis. Topics of interest include but are not limited to: * tableau methods for classical and non-classical logics (including first-order, higher-order, modal, temporal, description, hybrid, intuitionistic, substructural, fuzzy, relevance and non-monotonic logics) and their proof-theoretic foundations; * sequent calculi and natural deduction calculi for classical and non-classical logics, as tools for proof search and proof representation; * related methods (SMT, model elimination, model checking, connection methods, resolution, BDDs, translation approaches); * flexible, easily extendable, light-weight methods for theorem proving; novel types of calculi for theorem proving and verification in classical and non-classical logics; * systems, tools, implementations, empirical evaluations and applications (provers, proof assistants, logical frameworks, model checkers, etc.); * implementation techniques (data structures, efficient algorithms, performance measurement, extensibility, etc.); * extensions of tableau procedures with conflict-driven learning; * techniques for proof generation and compact (or humanly readable) proof representation; * theoretical and practical aspects of decision procedures; * applications of automated deduction to mathematics, software development, verification, deductive and temporal databases, knowledge representation, ontologies, fault diagnosis or teaching. We also welcome papers describing applications of tableau procedures to real-world examples. Such papers should be tailored to the tableau community and should focus on the role of reasoning and on logical aspects of the solution. SUBMISSION GUIDELINES Submissions are invited in three categories: (A) research papers reporting original theoretical research or applications, with length up to 15 pages excluding references; (B) system descriptions, with length up to 9 pages excluding references; (C) position papers and brief reports on work in progress, with length up to 9 pages excluding references. Submissions will be reviewed by the PC, possibly with the help of external reviewers, taking into account readability, relevance and originality. Any additional material (going beyond the page limit) can be included in a clearly marked appendix, which will be read at the discretion of the committee and must be removed for the camera-ready version. For category A submissions, the reported results must be original and not submitted for publication elsewhere. For category B submissions, a working implementation must be accessible via the internet. Authors are encouraged to publish the implementation under an open source license. The aim of a system description is to make the system available in such a way that people can use it, understand it, and build on it. Accepted papers in categories A and B will be published in the conference proceedings. Accepted papers in category C will be published as a Technical Report of the Middlesex University London. Papers must be edited in LaTeX using the llncs style and must be submitted electronically as PDF files via the EasyChair system: http://easychair.org/conferences/?conf=tableaux2019 For all accepted papers at least one author is required to attend the conference and present the paper. A title and a short abstract of about 100 words must be submitted before the paper submission deadline. Formatting instructions and the LNCS style files can be obtained at http://www.springer.com/br/computer-science/lncs/conference-proceedings-guidelines IMPORTANT DATES Abstract submission: 1 May 2019 Paper submission: 8 May 2019 Notification of paper decisions: 6 Jun 2019 Camera-ready papers due: 1 Jul 2019 TABLEAUX conference: 3-5 Sep 2019 PUBLICATION DETAILS The conference proceedings will be published in the Springer series Lecture Notes in Artificial Intelligence (LNAI/LNCS). BEST PAPER AWARDS The program committee will select (1) the TABLEAUX 2019 Best Paper and (2) the TABLEAUX 2019 Best Paper by a Junior Researcher, of which the latter will be supported by 500 Euros. Researchers will be considered junior if either they are students or their PhD award date is less than two years from the first day of the meeting, 3 September 2019. "Paper by a Junior Researcher" means that the paper's main author is junior, or the paper's main authors are all junior. For a paper to qualify, this information must be indicated in the pdf submission by adding an asterisk (*) at both the title and the main-author name(s). SUPPORT FOR STUDENT AND YOUNG RESEARCHER PARTICIPATION We have some limited funding for supporting students and young researchers traveling to the conference -- courtesy of direct sponsorship from Amazon and Springer and indirect sponsorship from the Association for Symbolic Logic. In addition, some funding will be available through the EUTypes COST action website. In all cases, authors of accepted papers will be given precedence. Please see the conference website for more details. In addition, the Middlesex University is offering accommodation at a ?30 daily rate in some excellently maintained shared flats located close to the conference venue (https://www.mdx.ac.uk/student-life/accommodation/platt-hall). AFFILIATED EVENTS (COMMON WITH FroCoS) WORKSHOPS: * The 25th Workshop on Automated Reasoning (ARW 2019, http://arw.csc.liv.ac.uk) Organizers: Florian Kammueller (Middlesex University) and Alexander Bolotov (University of Westminster) * Journeys in Computational Logic: Tributes to Roy Dyckhoff Organizers: St?phane Graham-Lengrand (SRI International), Ekaterina Komendantskaya (Heriot-Watt University) and Mehrnoosh Sadrzadeh (Queen Mary University of London) TUTORIALS: * Formalising concurrent computation: CLF, Celf, and applications (joint FroCoS/TABLEAUX tutorial). Presenters: Sonia Marin (IT-University of Copenhagen), Giselle Reis (Carnegie Mellon University in Qatar) and Iliano Cervesato (Carnegie Mellon University) * How to Build an Automated Theorem Prover - An Introductory Tutorial (invited TABLEAUX tutorial). Presenter: Jens Otten (University of Oslo) PROGRAM COMMITTEE Peter Baumgartner, Data61/CSIRO, Australia Maria Paola Bonacina, Universit? degli Studi di Verona, Italy James Brotherston, University College London, UK Serenella Cerrito, IBISC, Univ. Evry, Paris Saclay University, France Agata Ciabattoni, Technische Universit?t Wien, Austria Anupam Das, University of Copenhagen, Denmark Clare Dixon, University of Liverpool, UK Camillo Fiorentini, University of Milano, Italy Pascal Fontaine, LORIA, INRIA, University of Lorraine, France Didier Galmiche, LORIA, University of Lorraine, France Martin Giese, Universitetet i Oslo, Norway Laura Giordano, DISIT, Universit? del Piemonte Orientale, Italy Rajeev Gor?, The Australian National University, Australia St?phane Graham-Lengrand, SRI International, USA Reiner H?hnle, TU Darmstadt, Germany Ori Lahav, Tel Aviv University, Israel Tomer Libal, American University of Paris, France George Metcalfe, Universit?t Bern, Switzerland Dale Miller, INRIA and LIX/Ecole Polytechnique, France Leonardo de Moura, Microsoft Research, USA Neil Murray, SUNY at Albany, USA Cl?udia Nalon, University of Bras?lia, Brazil Sara Negri, University of Helsinki, Finland Hans de Nivelle, Nazarbayev University, Kazakhstan Nicola Olivetti, LSIS, Aix-Marseille Universit?, France Jens Otten, Universitetet i Oslo, Norway Valeria De Paiva, Nuance Communications, USA Nicolas Peltier, CNRS, Laboratoire d'Informatique de Grenoble, France Elaine Pimentel, Universidade Federal do Rio Grande do Norte, Brazil Francesca Poggiolesi, CNRS, IHST Paris, France Andrei Popescu, Middlesex University London, UK Gian Luca Pozzato, University of Turin, Italy Giles Reger, University of Manchester, UK Giselle Reis, Carnegie Mellon University, Qatar Renate Schmidt, University of Manchester, UK Viorica Sofronie-Stokkermans, Universit?t Koblenz-Landau, Germany Alwen Tiu, Australian National University, Australia Sophie Tourret, Max-Planck-Institut f?r Informatik, Saarbr?cken, Germany Dmitriy Traytel, ETH Z?rich, Switzerland Josef Urban, Czech Institute of Informatics, Robotics and Cybernetics, Czech Republic Luca Vigan?, King's College, London, UK Uwe Waldmann, Max-Planck-Institut f?r Informatik, Saarbr?cken, Germany Bruno Woltzenlogel Paleo, Vienna University of Technology, Austria PC CHAIRS Serenella Cerrito, IBISC, Univ. Evry, Paris Saclay University, France Andrei Popescu, Middlesex University London, UK LOCAL ORGANIZATION COMMITTEE Kelly Androutsopoulos, Middlesex University London, UK Jaap Boender, Middlesex University London, UK Michele Bottone, Middlesex University London, UK Florian Kammueller, Middlesex University London, UK Rajagopal Nagarajan, Middlesex University London, UK Andrei Popescu, Middlesex University London, UK Franco Raimondi, Middlesex University London, UK CONFERENCE CHAIR Andrei Popescu, Middlesex University London, UK -------------- next part -------------- An HTML attachment was scrubbed... URL: From asr at eafit.edu.co Fri Apr 26 17:48:51 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Fri, 26 Apr 2019 15:48:51 +0000 Subject: [Agda] [ Poll ] Maintain support for GHC 7.10.3 Message-ID: Dear all, Currently we are supporting Agda on GHC 7.10.3, 8.0.2, 8.2.2, 8.4.4 and 8.6.5. We are considering to drop support for GHC 7.10.3. Just to get an idea whether support for GHC 7.10.3 is still required, could you reply to this message if you need/want Agda to continue to build on GHC 7.10.3. Best, -- Andr?s -------------- next part -------------- An HTML attachment was scrubbed... URL: From 33dbqnxpy7if at gmail.com Fri Apr 26 19:04:17 2019 From: 33dbqnxpy7if at gmail.com (Serge Leblanc) Date: Fri, 26 Apr 2019 19:04:17 +0200 Subject: [Agda] Example of Finite maps with an string keys? Message-ID: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> Dear All, does someone haves an example of AVL trees with String-type keys? Saluton, ?u iu havas 'AVL-trees'-ekzemplon kun String-tipa klavo? Sinceran dankon pro via helpo. -- Serge Leblanc ------------------------------------------------------------------------ gpg --search-keys 0x67B17A3F Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 228 bytes Desc: OpenPGP digital signature URL: From melkon.or at gmail.com Fri Apr 26 19:45:55 2019 From: melkon.or at gmail.com (Orestis Melkonian) Date: Fri, 26 Apr 2019 19:45:55 +0200 Subject: [Agda] Example of Finite maps with an string keys? In-Reply-To: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> References: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> Message-ID: <910b3695-3227-ad97-6d47-5ac38e563d0a@gmail.com> You can find examples here: 1. (SO) https://stackoverflow.com/questions/36269333/agdas-standard-library-data-avl-sets-containing-data-string-as-values 2. (SO) https://stackoverflow.com/questions/42614042/map-with-strings-as-keys-in-agda 3. (Gist) https://gist.github.com/gallais/358ba798323868a7c4e0 Cheers, --OM On 26-04-19 19:04, Serge Leblanc wrote: > > Dear All, does someone haves an example of AVL trees with String-type > keys? > > Saluton, ?u iu havas 'AVL-trees'-ekzemplon kun String-tipa klavo? > > Sinceran dankon pro via helpo. > > -- > > Serge Leblanc > ------------------------------------------------------------------------ > gpg --search-keys 0x67B17A3F > Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From aaron-stump at uiowa.edu Fri Apr 26 23:01:55 2019 From: aaron-stump at uiowa.edu (Aaron Stump) Date: Fri, 26 Apr 2019 16:01:55 -0500 Subject: [Agda] [External] Re: Example of Finite maps with an string keys? In-Reply-To: <910b3695-3227-ad97-6d47-5ac38e563d0a@gmail.com> References: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> <910b3695-3227-ad97-6d47-5ac38e563d0a@gmail.com> Message-ID: <1bd391bf-007a-9642-7b9f-6e1a2b2d669a@uiowa.edu> You might also be interested in the trie data structure in the Iowa Agda Library: https://github.com/cedille/ial/blob/master/trie.agda Best, Aaron On 4/26/19 12:45 PM, Orestis Melkonian wrote: > You can find examples here: > > 1. (SO) > https://stackoverflow.com/questions/36269333/agdas-standard-library-data-avl-sets-containing-data-string-as-values > 2. (SO) > https://stackoverflow.com/questions/42614042/map-with-strings-as-keys-in-agda > 3. (Gist) https://gist.github.com/gallais/358ba798323868a7c4e0 > > Cheers, > --OM > > On 26-04-19 19:04, Serge Leblanc wrote: >> >> Dear All, does someone haves an example of AVL trees with String-type >> keys? >> >> Saluton, ?u iu havas 'AVL-trees'-ekzemplon kun String-tipa klavo? >> >> Sinceran dankon pro via helpo. >> >> -- >> >> Serge Leblanc >> ------------------------------------------------------------------------ >> gpg --search-keys 0x67B17A3F >> Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Sat Apr 27 03:01:08 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sat, 27 Apr 2019 09:01:08 +0800 Subject: [Agda] Fwd: [External] Re: Example of Finite maps with an string keys? In-Reply-To: References: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> <910b3695-3227-ad97-6d47-5ac38e563d0a@gmail.com> <1bd391bf-007a-9642-7b9f-6e1a2b2d669a@uiowa.edu> Message-ID: Note that the StackOverflow links given by Orestis are a little out of date, as AVL trees in the standard library v1.0 now support arbitrary equalities. There's also a Trie implementation been added to the development version of the standard library as of last week. Matthew On Sat, Apr 27, 2019 at 5:02 AM Aaron Stump wrote: > You might also be interested in the trie data structure in the Iowa Agda > Library: > > https://github.com/cedille/ial/blob/master/trie.agda > > Best, > Aaron > > On 4/26/19 12:45 PM, Orestis Melkonian wrote: > > You can find examples here: > > 1. (SO) > https://stackoverflow.com/questions/36269333/agdas-standard-library-data-avl-sets-containing-data-string-as-values > 2. (SO) > https://stackoverflow.com/questions/42614042/map-with-strings-as-keys-in-agda > 3. (Gist) https://gist.github.com/gallais/358ba798323868a7c4e0 > > Cheers, > --OM > > On 26-04-19 19:04, Serge Leblanc wrote: > > Dear All, does someone haves an example of AVL trees with String-type > keys? > > Saluton, ?u iu havas 'AVL-trees'-ekzemplon kun String-tipa klavo? > Sinceran dankon pro via helpo. > > -- > Serge Leblanc > ------------------------------ > gpg --search-keys 0x67B17A3F > Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F > > _______________________________________________ > Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From 33dbqnxpy7if at gmail.com Sat Apr 27 10:38:55 2019 From: 33dbqnxpy7if at gmail.com (Serge Leblanc) Date: Sat, 27 Apr 2019 10:38:55 +0200 Subject: [Agda] [External] Re: Example of Finite maps with an string keys? In-Reply-To: <1bd391bf-007a-9642-7b9f-6e1a2b2d669a@uiowa.edu> References: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> <910b3695-3227-ad97-6d47-5ac38e563d0a@gmail.com> <1bd391bf-007a-9642-7b9f-6e1a2b2d669a@uiowa.edu> Message-ID: <6f5434e0-2f18-95a4-4f24-0bb3989d6d8f@gmail.com> Thank you for the links, I will download the new version of the libraries. Dankon pro viaj interretaj ligoj, mi el?ultos la novan version de la libraro. Sincere, On 19-04-26 23:01, Aaron Stump wrote: > You might also be interested in the trie data structure in the Iowa > Agda Library: > > https://github.com/cedille/ial/blob/master/trie.agda > > Best, > Aaron > > On 4/26/19 12:45 PM, Orestis Melkonian wrote: >> You can find examples here: >> >> 1. (SO) >> https://stackoverflow.com/questions/36269333/agdas-standard-library-data-avl-sets-containing-data-string-as-values >> 2. (SO) >> https://stackoverflow.com/questions/42614042/map-with-strings-as-keys-in-agda >> 3. (Gist) https://gist.github.com/gallais/358ba798323868a7c4e0 >> >> Cheers, >> --OM >> >> On 26-04-19 19:04, Serge Leblanc wrote: >>> >>> Dear All, does someone haves an example of AVL trees with >>> String-type keys? >>> >>> Saluton, ?u iu havas 'AVL-trees'-ekzemplon kun String-tipa klavo? >>> >>> Sinceran dankon pro via helpo. >>> >>> -- >>> >>> Serge Leblanc >>> ------------------------------------------------------------------------ >>> gpg --search-keys 0x67B17A3F >>> Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > -- Serge Leblanc ------------------------------------------------------------------------ gpg --search-keys 0x67B17A3F Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 228 bytes Desc: OpenPGP digital signature URL: From guillaume.allais at ens-lyon.org Sun Apr 28 12:10:41 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Sun, 28 Apr 2019 11:10:41 +0100 Subject: [Agda] Fwd: [External] Re: Example of Finite maps with an string keys? In-Reply-To: References: <71b5e046-9cd3-3ed1-9f27-912d398b027f@gmail.com> <910b3695-3227-ad97-6d47-5ac38e563d0a@gmail.com> <1bd391bf-007a-9642-7b9f-6e1a2b2d669a@uiowa.edu> Message-ID: <1950751d-69e0-702e-5d6b-67f1f5c4631b@ens-lyon.org> Let me add that we have READMEs showing how to use these datatypes. The AVL-tree one is using a strict total order based on propositional equality but that's not the case for the Trie one: https://agda.github.io/agda-stdlib/README.AVL.html https://agda.github.io/agda-stdlib/README.Trie.NonDependent.html On 27/04/2019 02:01, Matthew Daggitt wrote: > Note that the StackOverflow links given by Orestis are a little out of > date, as AVL trees in the standard library v1.0 now support arbitrary > equalities. There's also a Trie implementation been added to the > development version of the standard library as of last week. > > Matthew > > On Sat, Apr 27, 2019 at 5:02 AM Aaron Stump wrote: > >> You might also be interested in the trie data structure in the Iowa Agda >> Library: >> >> https://github.com/cedille/ial/blob/master/trie.agda >> >> Best, >> Aaron >> >> On 4/26/19 12:45 PM, Orestis Melkonian wrote: >> >> You can find examples here: >> >> 1. (SO) >> https://stackoverflow.com/questions/36269333/agdas-standard-library-data-avl-sets-containing-data-string-as-values >> 2. (SO) >> https://stackoverflow.com/questions/42614042/map-with-strings-as-keys-in-agda >> 3. (Gist) https://gist.github.com/gallais/358ba798323868a7c4e0 >> >> Cheers, >> --OM >> >> On 26-04-19 19:04, Serge Leblanc wrote: >> >> Dear All, does someone haves an example of AVL trees with String-type >> keys? >> >> Saluton, ?u iu havas 'AVL-trees'-ekzemplon kun String-tipa klavo? >> Sinceran dankon pro via helpo. >> >> -- >> Serge Leblanc >> ------------------------------ >> gpg --search-keys 0x67B17A3F >> Fingerprint = 2B2D AC93 8620 43D3 D2C2 C2D3 B67C F631 67B1 7A3F >> >> _______________________________________________ >> Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda >> >> >> _______________________________________________ >> Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From liang.ting.chen.tw at gmail.com Mon Apr 29 13:12:47 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Mon, 29 Apr 2019 12:12:47 +0100 Subject: [Agda] Quoting mutual definition Message-ID: Hi all, I am writing a tactic generating the elimination rule for dependent type, i.e. the `destruct` tactic in Coq, using Agda's reflection mechanism. However, it seems impossible to know if a definition is mutually defined or not as this information is not exposed unless it is given manually. Is that right? For example, suppose two data types are mutually defined mutual data Even : ? ? Set where z : Even 0 2n : Odd n ? Even (suc n) data Odd : ? ? Set where s : Even n ? Odd (suc n) By quoting `Even` or any term of `Even`, I want to know that `Odd` is also part of the mutual definition so that the following elimination rule can be generated module _ {P : ? n ? Even n ? Set} {Q : ? n ? Odd n ? Set} (Pz : P 0 z)(Pss : ? n o ? Q n o ? P (suc n) (ss o)) (Pone : ? n e ? P n e ? Q (suc n) (one e)) where mutual elimEven : ? n ? (e : Even n) ? P n e elimEven .0 z = Pz elimEven .(suc _) (ss x) = Pss _ x (elimOdd _ x) elimOdd : ? n ? (o : Odd n) ? Q n o elimOdd .(suc _) (one x) = Pone _ x (elimEven _ x) Or, if there is any workaround, please let me know! Thanks. -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Mon Apr 29 13:23:29 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Mon, 29 Apr 2019 13:23:29 +0200 Subject: [Agda] Quoting mutual definition In-Reply-To: References: Message-ID: The information isn't available directly, but you could do the dependency analysis yourself by traversing the constructor types and looking up the definition of encountered names to see which refer back to the type in question. / Ulf On Mon, Apr 29, 2019 at 1:13 PM Liang-Ting Chen < liang.ting.chen.tw at gmail.com> wrote: > Hi all, > > I am writing a tactic generating the elimination rule for dependent type, > i.e. the `destruct` tactic in Coq, using Agda's reflection mechanism. > However, it seems impossible to know if a definition is mutually defined or > not as this information is not exposed unless it is given manually. Is that > right? > > For example, suppose two data types are mutually defined > > mutual > data Even : ? ? Set where > z : Even 0 > 2n : Odd n ? Even (suc n) > data Odd : ? ? Set where > s : Even n ? Odd (suc n) > > By quoting `Even` or any term of `Even`, I want to know that `Odd` is also > part of the mutual definition so that the following elimination rule can be > generated > > module _ {P : ? n ? Even n ? Set} {Q : ? n ? Odd n ? Set} > (Pz : P 0 z)(Pss : ? n o ? Q n o ? P (suc n) (ss o)) (Pone : ? n e ? P n > e ? Q (suc n) (one e)) where > mutual > elimEven : ? n ? (e : Even n) ? P n e > elimEven .0 z = Pz > elimEven .(suc _) (ss x) = Pss _ x (elimOdd _ x) > > elimOdd : ? n ? (o : Odd n) ? Q n o > elimOdd .(suc _) (one x) = Pone _ x (elimEven _ x) > > Or, if there is any workaround, please let me know! Thanks. > -- > Best regards, > Liang-Ting > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From liang.ting.chen.tw at gmail.com Mon Apr 29 17:13:28 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Mon, 29 Apr 2019 16:13:28 +0100 Subject: [Agda] Quoting mutual definition In-Reply-To: References: Message-ID: Thanks for the useful tip! Indeed, dependency analysis would do the trick. But, as the information was given but disregarded later, would it be simpler and easier to keep this information and expose it? No idea how much effort needed to have this information available via reflection, though. -- Liang-Ting On Mon, 29 Apr 2019 at 12:23, Ulf Norell wrote: > The information isn't available directly, but you could do the dependency > analysis yourself by traversing the constructor types and looking up the > definition of encountered names to see which refer back to the type in > question. > > / Ulf > > On Mon, Apr 29, 2019 at 1:13 PM Liang-Ting Chen < > liang.ting.chen.tw at gmail.com> wrote: > >> Hi all, >> >> I am writing a tactic generating the elimination rule for dependent type, >> i.e. the `destruct` tactic in Coq, using Agda's reflection mechanism. >> However, it seems impossible to know if a definition is mutually defined or >> not as this information is not exposed unless it is given manually. Is that >> right? >> >> For example, suppose two data types are mutually defined >> >> mutual >> data Even : ? ? Set where >> z : Even 0 >> 2n : Odd n ? Even (suc n) >> data Odd : ? ? Set where >> s : Even n ? Odd (suc n) >> >> By quoting `Even` or any term of `Even`, I want to know that `Odd` is >> also part of the mutual definition so that the following elimination rule >> can be generated >> >> module _ {P : ? n ? Even n ? Set} {Q : ? n ? Odd n ? Set} >> (Pz : P 0 z)(Pss : ? n o ? Q n o ? P (suc n) (ss o)) (Pone : ? n e ? P >> n e ? Q (suc n) (one e)) where >> mutual >> elimEven : ? n ? (e : Even n) ? P n e >> elimEven .0 z = Pz >> elimEven .(suc _) (ss x) = Pss _ x (elimOdd _ x) >> >> elimOdd : ? n ? (o : Odd n) ? Q n o >> elimOdd .(suc _) (one x) = Pone _ x (elimEven _ x) >> >> Or, if there is any workaround, please let me know! Thanks. >> -- >> Best regards, >> Liang-Ting >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Mon Apr 29 17:45:38 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Mon, 29 Apr 2019 18:45:38 +0300 Subject: [Agda] Quoting mutual definition In-Reply-To: References: Message-ID: If the information is kept, that would be useful for backends as well. On Mon, Apr 29, 2019 at 6:13 PM Liang-Ting Chen < liang.ting.chen.tw at gmail.com> wrote: > Thanks for the useful tip! Indeed, dependency analysis would do the trick. > But, as the information was given but disregarded later, would it be > simpler and easier to keep this information and expose it? No idea how much > effort needed to have this information available via reflection, though. -- > Liang-Ting > > On Mon, 29 Apr 2019 at 12:23, Ulf Norell wrote: > >> The information isn't available directly, but you could do the dependency >> analysis yourself by traversing the constructor types and looking up the >> definition of encountered names to see which refer back to the type in >> question. >> >> / Ulf >> >> On Mon, Apr 29, 2019 at 1:13 PM Liang-Ting Chen < >> liang.ting.chen.tw at gmail.com> wrote: >> >>> Hi all, >>> >>> I am writing a tactic generating the elimination rule for dependent >>> type, i.e. the `destruct` tactic in Coq, using Agda's reflection mechanism. >>> However, it seems impossible to know if a definition is mutually defined or >>> not as this information is not exposed unless it is given manually. Is that >>> right? >>> >>> For example, suppose two data types are mutually defined >>> >>> mutual >>> data Even : ? ? Set where >>> z : Even 0 >>> 2n : Odd n ? Even (suc n) >>> data Odd : ? ? Set where >>> s : Even n ? Odd (suc n) >>> >>> By quoting `Even` or any term of `Even`, I want to know that `Odd` is >>> also part of the mutual definition so that the following elimination rule >>> can be generated >>> >>> module _ {P : ? n ? Even n ? Set} {Q : ? n ? Odd n ? Set} >>> (Pz : P 0 z)(Pss : ? n o ? Q n o ? P (suc n) (ss o)) (Pone : ? n e ? P >>> n e ? Q (suc n) (one e)) where >>> mutual >>> elimEven : ? n ? (e : Even n) ? P n e >>> elimEven .0 z = Pz >>> elimEven .(suc _) (ss x) = Pss _ x (elimOdd _ x) >>> >>> elimOdd : ? n ? (o : Odd n) ? Q n o >>> elimOdd .(suc _) (one x) = Pone _ x (elimEven _ x) >>> >>> Or, if there is any workaround, please let me know! Thanks. >>> -- >>> Best regards, >>> Liang-Ting >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> > > -- > Best regards, > Liang-Ting > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Graham.Hutton at nottingham.ac.uk Tue Apr 30 11:35:51 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Tue, 30 Apr 2019 09:35:51 +0000 Subject: [Agda] MPC 2019 deadline extension Message-ID: ====================================================================== DEADLINE EXTENSION TO *10 MAY* -- MPC 2019 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== TIMELINE: Abstract submission 7th May 2019 (AoE) (extended) Paper submission 10th May 2019 (AoE) (extended) Author notification 14th June 2019 Camera ready copy 12th July 2019 Conference 7-9 October 2019 KEYNOTE SPEAKERS: Assia Mahboubi INRIA, France Annabelle McIver Macquarie University, Australia BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). SCOPE: MPC seeks original papers on mathematical methods and tools put to use in program construction. Topics of interest range from algorithmics to support for program construction in programming languages and systems. Typical areas include type systems, program analysis and transformation, programming language semantics, security, and program logics. The notion of a 'program' is interpreted broadly, ranging from algorithms to hardware. Theoretical contributions are welcome, provided that their relevance to program construction is clear. Reports on applications are welcome, provided that their mathematical basis is evident. We also encourage the submission of 'programming pearls' that present elegant and instructive examples of the mathematics of program construction. SUBMISSION: Submission is in two stages. Abstracts (plain text, maximum 250 words) must be submitted by 7th May 2019. Full papers (pdf, formatted using the llncs.sty style file for LaTex) must be submitted by 10th May 2019. There is no prescribed page limit, but authors should strive for brevity. Both abstracts and papers will be submitted using EasyChair. Papers must present previously unpublished work, and not be submitted concurrently to any other publication venue. Submissions will be evaluated by the program committee according to their relevance, correctness, significance, originality, and clarity. Each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant, and comparing it with previous work. Accepted papers must be presented in person at the conference by one of the authors. The proceedings of MPC 2019 will be published in the Lecture Notes in Computer Science (LNCS) series, as with all previous instances of the conference. Authors of accepted papers will be expected to transfer copyright to Springer for this purpose. After the conference, authors of the best papers from MPC 2019 and MPC 2015 will be invited to submit revised versions to a special issue of Science of Computer Programming (SCP). For any queries about submission please contact the program chair, Graham Hutton . PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK CONFERENE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISERS: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From Thorsten.Altenkirch at nottingham.ac.uk Tue Apr 30 11:56:16 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 30 Apr 2019 09:56:16 +0000 Subject: [Agda] When and where is the next AIM? Message-ID: Just checked the notes of the last one but it doesn?t say anything. Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From andreas.abel at ifi.lmu.de Tue Apr 30 12:50:32 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Tue, 30 Apr 2019 12:50:32 +0200 Subject: [Agda] When and where is the next AIM? In-Reply-To: References: Message-ID: <82b18e92-137d-a4ec-a88a-9a54878e6d23@ifi.lmu.de> We have an offer from Chuangjie Xu who will host the next AIM in Munich. --Andreas On 2019-04-30 11:56, Thorsten Altenkirch wrote: > Just checked the notes of the last one but it doesn?t say anything. > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From Thorsten.Altenkirch at nottingham.ac.uk Tue Apr 30 14:11:21 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 30 Apr 2019 12:11:21 +0000 Subject: [Agda] When and where is the next AIM? In-Reply-To: <82b18e92-137d-a4ec-a88a-9a54878e6d23@ifi.lmu.de> References: <82b18e92-137d-a4ec-a88a-9a54878e6d23@ifi.lmu.de> Message-ID: <4763A3B4-CFDF-4943-99B7-F7F41426855D@exmail.nottingham.ac.uk> Ok, this answers one part of the question. __ Thorsten ?On 30/04/2019, 11:51, "Agda on behalf of Andreas Abel" wrote: We have an offer from Chuangjie Xu who will host the next AIM in Munich. --Andreas On 2019-04-30 11:56, Thorsten Altenkirch wrote: > Just checked the notes of the last one but it doesn?t say anything. > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From apostolis.xekoukoulotakis at gmail.com Tue Apr 30 14:58:30 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Tue, 30 Apr 2019 15:58:30 +0300 Subject: [Agda] When and where is the next AIM? In-Reply-To: <4763A3B4-CFDF-4943-99B7-F7F41426855D@exmail.nottingham.ac.uk> References: <82b18e92-137d-a4ec-a88a-9a54878e6d23@ifi.lmu.de> <4763A3B4-CFDF-4943-99B7-F7F41426855D@exmail.nottingham.ac.uk> Message-ID: I will be near Munich in the second half of July for two weeks. On Tue, Apr 30, 2019 at 3:11 PM Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > Ok, this answers one part of the question. __ > > Thorsten > > ?On 30/04/2019, 11:51, "Agda on behalf of Andreas Abel" < > agda-bounces at lists.chalmers.se on behalf of andreas.abel at ifi.lmu.de> > wrote: > > We have an offer from Chuangjie Xu who will host the next AIM in > Munich. > > --Andreas > > On 2019-04-30 11:56, Thorsten Altenkirch wrote: > > Just checked the notes of the last one but it doesn?t say anything. > > > > Thorsten > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Wed May 1 08:32:37 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Wed, 1 May 2019 14:32:37 +0800 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? Message-ID: In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor? Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas. ``` gcd : (m n : ?) ? Acc _<_ m ? n < m ? ? gcd m zero _ _ = m gcd m (suc n) (acc rec) n From Jesper at sikanda.be Wed May 1 09:48:07 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 1 May 2019 09:48:07 +0200 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: Message-ID: Hi Matthew, In our paper on definitional proof irrelevance ( https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it). A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year ( https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a ) -- Jesper On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt wrote: > In the Agda documentation > it is > pretty clear that the only time you can pattern match against irrelevant > arguments is when the type is empty. My own reasoning for this has always > been that this is to stop decisions being made depending on the result of > the pattern match. This leads me to wonder if there are any theoretical > reasons why it's not possible to also mark a type irrelevant when it only > has a single constructor? > > Consider the motivating example below. Clearly the `Acc` argument is never > actually used in the computation of the final value, and no decisions can > be based on its value as it only has a single constructor. It seems like it > should be possible to mark it irrelevant. If this were possible then we > would immediately get rid of a whole bunch of annoying congruence lemmas. > ``` > gcd : (m n : ?) ? Acc _<_ m ? n < m ? ? > gcd m zero _ _ = m > gcd m (suc n) (acc rec) n m n) > ``` > Many thanks, > Matthew > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Wed May 1 12:14:24 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Wed, 1 May 2019 18:14:24 +0800 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: Message-ID: Hi Jesper, Thanks for the great reply. I had forgotten about passing of absurd hypotheses, I obviously spend too much time trying to prove things that are true in Agda... Cheers, Matthew On Wed, May 1, 2019 at 3:48 PM Jesper Cockx wrote: > Hi Matthew, > > In our paper on definitional proof irrelevance ( > https://hal.inria.fr/hal-01859964) we give a criterion for when it is > allowed to pattern match on an irrelevant argument. As we argue in the > paper, the condition that the datatype has a single constructor is neither > sufficient nor necessary. The criterion we give is not yet implemented in > Agda, but I hope to add it in the not-too-distant future (it depends on my > PR https://github.com/agda/agda/pull/3589 being merged first). > Unfortunately, the Acc datatype does not satisfy this criterion. In fact, > allowing pattern matching on irrelevant Acc would break strong > normalization of the theory, as you can always have an absurd hypothesis of > type Acc but evaluation would not be blocked on this argument because it's > irrelevant. So the best you can do is get propositional (instead of > definitional) irrelevance by proving irrelevance of Acc by hand (or > postulate it). > > A historical note: Agda used to allow matching on single-constructor > datatypes under the --experimental-irrelevance flag, but this was > completely broken so I decided to remove it last year ( > https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a > ) > > -- Jesper > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > wrote: > >> In the Agda documentation >> it is >> pretty clear that the only time you can pattern match against irrelevant >> arguments is when the type is empty. My own reasoning for this has always >> been that this is to stop decisions being made depending on the result of >> the pattern match. This leads me to wonder if there are any theoretical >> reasons why it's not possible to also mark a type irrelevant when it only >> has a single constructor? >> >> Consider the motivating example below. Clearly the `Acc` argument is >> never actually used in the computation of the final value, and no decisions >> can be based on its value as it only has a single constructor. It seems >> like it should be possible to mark it irrelevant. If this were possible >> then we would immediately get rid of a whole bunch of annoying congruence >> lemmas. >> ``` >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ? >> gcd m zero _ _ = m >> gcd m (suc n) (acc rec) n> m n) >> ``` >> Many thanks, >> Matthew >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed May 1 12:16:38 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 1 May 2019 10:16:38 +0000 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: Message-ID: I am just wondering with normalisation under inconsistent assumptions is such an important feature? Is this the only thing that goes wrong? Thorsten From: Agda on behalf of Jesper Cockx Date: Wednesday, 1 May 2019 at 08:48 To: Matthew Daggitt Cc: Agda mailing list Subject: Re: [Agda] Pattern matching on irrelevant types with only one constructor? Hi Matthew, In our paper on definitional proof irrelevance (https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it). A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a) -- Jesper On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > wrote: In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor? Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas. ``` gcd : (m n : ?) ? Acc _<_ m ? n < m ? ? gcd m zero _ _ = m gcd m (suc n) (acc rec) n https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Wed May 1 12:32:44 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 1 May 2019 12:32:44 +0200 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: Message-ID: Well, if we don't have strong normalization we also lose decidability of typechecking, which is kind of an important design goal of Agda IMO. -- Jesper On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > I am just wondering with normalisation under inconsistent assumptions is > such an important feature? Is this the only thing that goes wrong? > > > > Thorsten > > > > *From: *Agda on behalf of Jesper Cockx < > Jesper at sikanda.be> > *Date: *Wednesday, 1 May 2019 at 08:48 > *To: *Matthew Daggitt > *Cc: *Agda mailing list > *Subject: *Re: [Agda] Pattern matching on irrelevant types with only one > constructor? > > > > Hi Matthew, > > > > In our paper on definitional proof irrelevance ( > https://hal.inria.fr/hal-01859964) we give a criterion for when it is > allowed to pattern match on an irrelevant argument. As we argue in the > paper, the condition that the datatype has a single constructor is neither > sufficient nor necessary. The criterion we give is not yet implemented in > Agda, but I hope to add it in the not-too-distant future (it depends on my > PR https://github.com/agda/agda/pull/3589 being merged first). > Unfortunately, the Acc datatype does not satisfy this criterion. In fact, > allowing pattern matching on irrelevant Acc would break strong > normalization of the theory, as you can always have an absurd hypothesis of > type Acc but evaluation would not be blocked on this argument because it's > irrelevant. So the best you can do is get propositional (instead of > definitional) irrelevance by proving irrelevance of Acc by hand (or > postulate it). > > > > A historical note: Agda used to allow matching on single-constructor > datatypes under the --experimental-irrelevance flag, but this was > completely broken so I decided to remove it last year ( > https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a > ) > > > > -- Jesper > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > wrote: > > In the Agda documentation > it is > pretty clear that the only time you can pattern match against irrelevant > arguments is when the type is empty. My own reasoning for this has always > been that this is to stop decisions being made depending on the result of > the pattern match. This leads me to wonder if there are any theoretical > reasons why it's not possible to also mark a type irrelevant when it only > has a single constructor? > > > > Consider the motivating example below. Clearly the `Acc` argument is never > actually used in the computation of the final value, and no decisions can > be based on its value as it only has a single constructor. It seems like it > should be possible to mark it irrelevant. If this were possible then we > would immediately get rid of a whole bunch of annoying congruence lemmas. > > ``` > > gcd : (m n : ?) ? Acc _<_ m ? n < m ? ? > > gcd m zero _ _ = m > > gcd m (suc n) (acc rec) n m n) > > ``` > > Many thanks, > > Matthew > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed May 1 13:59:01 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 1 May 2019 11:59:01 +0000 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: Message-ID: <13AE70E5-E94E-46B1-9440-E09EB4EDB8F2@exmail.nottingham.ac.uk> The usual argument applies: in practice agda type checking is undecidable but the user will interrupt it when she gets bored. If it is semidecidable but divergence only happens when you are inconsistent that sounds pretty ok to me. Thorsten From: Jesper Cockx Date: Wednesday, 1 May 2019 at 11:33 To: Thorsten Altenkirch Cc: Matthew Daggitt , Agda mailing list Subject: Re: [Agda] Pattern matching on irrelevant types with only one constructor? Well, if we don't have strong normalization we also lose decidability of typechecking, which is kind of an important design goal of Agda IMO. -- Jesper On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > wrote: I am just wondering with normalisation under inconsistent assumptions is such an important feature? Is this the only thing that goes wrong? Thorsten From: Agda > on behalf of Jesper Cockx > Date: Wednesday, 1 May 2019 at 08:48 To: Matthew Daggitt > Cc: Agda mailing list > Subject: Re: [Agda] Pattern matching on irrelevant types with only one constructor? Hi Matthew, In our paper on definitional proof irrelevance (https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it). A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a) -- Jesper On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > wrote: In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor? Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas. ``` gcd : (m n : ?) ? Acc _<_ m ? n < m ? ? gcd m zero _ _ = m gcd m (suc n) (acc rec) n https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From jon at jonmsterling.com Wed May 1 16:34:37 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Wed, 01 May 2019 10:34:37 -0400 Subject: [Agda] =?utf-8?q?Pattern_matching_on_irrelevant_types_with_only_?= =?utf-8?q?one_constructor=3F?= In-Reply-To: References: Message-ID: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Just to clarify, strong normalization (SN) is irrelevant here --- what is relevant is that there exists _some_ normalization strategy. Strong normalization is a property of an abstract rewriting system, a methodology which generally is not even considered for type theories which have strong type-directed equational rules, which tend to disrupt confluence. Modern Swedish-style type theories rely on techniques beyond abstract rewriting systems for their metatheory, and SN is therefore not coming into the picture. It is likely that Agda's core language is normalization in the general sense (there is a way to choose canonical representatives of definitional equivalence classses), and this is really orthogonal to SN/WN/etc (since "normalization" in the sense that I just described can be expressed without even mentioning an abstract rewriting system). To respond to Thorsten's comments a bit further down the thread, I tried really hard to make proof assistants without a complete decision procedure for typing practical, and I determined that it is not likely to work out. Decidable type checking is good. Best, Jon On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > Well, if we don't have strong normalization we also lose decidability > of typechecking, which is kind of an important design goal of Agda IMO. > > -- Jesper > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > wrote: > > I am just wondering with normalisation under inconsistent assumptions is such an important feature? Is this the only thing that goes wrong?____ > > > __ __ > > > Thorsten____ > > > __ __ > > > *From: *Agda on behalf of Jesper Cockx > > *Date: *Wednesday, 1 May 2019 at 08:48 > > *To: *Matthew Daggitt > > *Cc: *Agda mailing list > > *Subject: *Re: [Agda] Pattern matching on irrelevant types with only one constructor?____ > > > __ __ > > > Hi Matthew,____ > > > __ __ > > > In our paper on definitional proof irrelevance (https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it).____ > > > __ __ > > > A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > __ __ > > > -- Jesper____ > > > __ __ > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt wrote:____ > > >> In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor?____ > > >> __ __ > > >> Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas.____ > > >> ```____ > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > >> gcd m zero _ _ = m____ > > >> gcd m (suc n) (acc rec) n > >> ```____ > > >> Many thanks,____ > > >> Matthew____ > > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From Thorsten.Altenkirch at nottingham.ac.uk Wed May 1 17:16:54 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 1 May 2019 15:16:54 +0000 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: <3565ACE6-BFBA-4B77-AA7B-09BDFA2B738C@exmail.nottingham.ac.uk> That is not really an argument. Clearly there are many situations where we would like to reduce a term which will only terminate in a consistent context. E.g. we can reduce terms which are only guarded by a proof of well-foundedness. Another situation is wether you can reduce a coercion which relies on an equality proof. The latter could lead to a failure of type-soundness but does it matter when we execute symbolically (i.e. not at run-time). I don't say that the answer is always that we shouldn't care, but I was asking for better arguments why we should. Thorsten ?On 01/05/2019, 15:35, "Agda on behalf of Jon Sterling" wrote: To respond to Thorsten's comments a bit further down the thread, I tried really hard to make proof assistants without a complete decision procedure for typing practical, and I determined that it is not likely to work out. Decidable type checking is good. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From Jesper at sikanda.be Wed May 1 17:21:59 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 1 May 2019 17:21:59 +0200 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: <3565ACE6-BFBA-4B77-AA7B-09BDFA2B738C@exmail.nottingham.ac.uk> References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> <3565ACE6-BFBA-4B77-AA7B-09BDFA2B738C@exmail.nottingham.ac.uk> Message-ID: @Jon: The main point is indeed to have decidable typechecking, not normalization per se. Thanks for clarifying. @Thorsten: But we *can* reduce the term when we give it the actual termination proof, the point here is only that the termination proof is not irrelevant for checking conversion. When compiling the code to Haskell, Agda even detects that Acc does not contain any interesting information and erases the termination proofs, so there's no run-time cost, only a compile-time one. -- Jesper On Wed, May 1, 2019 at 5:17 PM Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > That is not really an argument. > > Clearly there are many situations where we would like to reduce a term > which will only terminate in a consistent context. E.g. we can reduce terms > which are only guarded by a proof of well-foundedness. Another situation is > wether you can reduce a coercion which relies on an equality proof. The > latter could lead to a failure of type-soundness but does it matter when we > execute symbolically (i.e. not at run-time). > > I don't say that the answer is always that we shouldn't care, but I was > asking for better arguments why we should. > > Thorsten > > ?On 01/05/2019, 15:35, "Agda on behalf of Jon Sterling" < > agda-bounces at lists.chalmers.se on behalf of jon at jonmsterling.com> wrote: > > To respond to Thorsten's comments a bit further down the thread, I > tried really hard to make proof assistants without a complete decision > procedure for typing practical, and I determined that it is not likely to > work out. Decidable type checking is good. > > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed May 1 17:33:45 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 1 May 2019 15:33:45 +0000 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> <3565ACE6-BFBA-4B77-AA7B-09BDFA2B738C@exmail.nottingham.ac.uk> Message-ID: <2B577E48-0642-4E9B-BF58-3353332BBC28@exmail.nottingham.ac.uk> Exactly. It is not a cost but it means that a certain definitional equality doesn?t hold which makes it harder to check your programs. I would be much more flexible with ?judgemental equality? anyway, maybe following the lines of Andromeda. The user should be able to define her own eqaulity as long as it is sound (ie.e it has to produce a proof of equality). From: Jesper Cockx Date: Wednesday, 1 May 2019 at 16:22 To: Thorsten Altenkirch Cc: Jon Sterling , "agda at lists.chalmers.se" Subject: Re: [Agda] Pattern matching on irrelevant types with only one constructor? @Thorsten: But we *can* reduce the term when we give it the actual termination proof, the point here is only that the termination proof is not irrelevant for checking conversion. When compiling the code to Haskell, Agda even detects that Acc does not contain any interesting information and erases the termination proofs, so there's no run-time cost, only a compile-time one. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Thu May 2 04:37:36 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 2 May 2019 10:37:36 +0800 Subject: [Agda] Performance tips and profiling memory usage Message-ID: Hi all, The standard library has now reached the point where it's taking ~7GB of RAM to check which is obviously putting a strain on my 8GB laptop. I was wondering if there were either: a) any tips or tricks for reducing memory usage. I've found this page on the old Wiki, but given it was last updated 6 years ago I assume things have probably moved on. The new documentation doesn't seem to have a corresponding page. b) any way of profiling memory usage per module? Running htop I've noticed that the memory usage often suddenly jumps by half a gig or more. I'm wondering if there are a couple of files responsible and if so whether there is an easy way I could locate them? Many thanks, Matthew -------------- next part -------------- An HTML attachment was scrubbed... URL: From sanzhiyan at gmail.com Thu May 2 10:40:48 2019 From: sanzhiyan at gmail.com (Andrea Vezzosi) Date: Thu, 2 May 2019 10:40:48 +0200 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: Is there an established term for "normalizing in an open context" because often I end up saying strong normalization for that, even if the part about _every_ reduction path is not quite relevant. On Wed, May 1, 2019 at 4:34 PM Jon Sterling wrote: > > Just to clarify, strong normalization (SN) is irrelevant here --- what is relevant is that there exists _some_ normalization strategy. Strong normalization is a property of an abstract rewriting system, a methodology which generally is not even considered for type theories which have strong type-directed equational rules, which tend to disrupt confluence. Modern Swedish-style type theories rely on techniques beyond abstract rewriting systems for their metatheory, and SN is therefore not coming into the picture. It is likely that Agda's core language is normalization in the general sense (there is a way to choose canonical representatives of definitional equivalence classses), and this is really orthogonal to SN/WN/etc (since "normalization" in the sense that I just described can be expressed without even mentioning an abstract rewriting system). > > To respond to Thorsten's comments a bit further down the thread, I tried really hard to make proof assistants without a complete decision procedure for typing practical, and I determined that it is not likely to work out. Decidable type checking is good. > > Best, > Jon > > > On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > > Well, if we don't have strong normalization we also lose decidability > > of typechecking, which is kind of an important design goal of Agda IMO. > > > > -- Jesper > > > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > > wrote: > > > I am just wondering with normalisation under inconsistent assumptions is such an important feature? Is this the only thing that goes wrong?____ > > > > > __ __ > > > > > Thorsten____ > > > > > __ __ > > > > > *From: *Agda on behalf of Jesper Cockx > > > *Date: *Wednesday, 1 May 2019 at 08:48 > > > *To: *Matthew Daggitt > > > *Cc: *Agda mailing list > > > *Subject: *Re: [Agda] Pattern matching on irrelevant types with only one constructor?____ > > > > > __ __ > > > > > Hi Matthew,____ > > > > > __ __ > > > > > In our paper on definitional proof irrelevance (https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it).____ > > > > > __ __ > > > > > A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > > > __ __ > > > > > -- Jesper____ > > > > > __ __ > > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt wrote:____ > > > > >> In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor?____ > > > > >> __ __ > > > > >> Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas.____ > > > > >> ```____ > > > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > > > >> gcd m zero _ _ = m____ > > > > >> gcd m (suc n) (acc rec) n > > > >> ```____ > > > > >> Many thanks,____ > > > > >> Matthew____ > > > > >> _______________________________________________ > > >> Agda mailing list > > >> Agda at lists.chalmers.se > > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From andreas.abel at ifi.lmu.de Thu May 2 10:48:46 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Thu, 2 May 2019 10:48:46 +0200 Subject: [Agda] [Open normalization] Re: Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: <94b9ef4d-2665-fc1d-e776-5223d824c827@ifi.lmu.de> On 2019-05-02 10:40, Andrea Vezzosi wrote: > Is there an established term for "normalizing in an open context" > because often I end up saying strong normalization for that, even if > the part about _every_ reduction path is not quite relevant. I tend to do the same, using SN for what correctly could be called "normalization of open terms" or maybe "open normalization". But even "open terms" is not understood by everyone. Maybe "normalization under binders" would be an alternative, assuming folks know what a "under a binder" means. But somehow "normalization under binders" is too long already. > On Wed, May 1, 2019 at 4:34 PM Jon Sterling wrote: >> >> Just to clarify, strong normalization (SN) is irrelevant here --- what is relevant is that there exists _some_ normalization strategy. Strong normalization is a property of an abstract rewriting system, a methodology which generally is not even considered for type theories which have strong type-directed equational rules, which tend to disrupt confluence. Modern Swedish-style type theories rely on techniques beyond abstract rewriting systems for their metatheory, and SN is therefore not coming into the picture. It is likely that Agda's core language is normalization in the general sense (there is a way to choose canonical representatives of definitional equivalence classses), and this is really orthogonal to SN/WN/etc (since "normalization" in the sense that I just described can be expressed without even mentioning an abstract rewriting system). >> >> To respond to Thorsten's comments a bit further down the thread, I tried really hard to make proof assistants without a complete decision procedure for typing practical, and I determined that it is not likely to work out. Decidable type checking is good. >> >> Best, >> Jon >> >> >> On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: >>> Well, if we don't have strong normalization we also lose decidability >>> of typechecking, which is kind of an important design goal of Agda IMO. >>> >>> -- Jesper >>> >>> On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch >>> wrote: >>>> I am just wondering with normalisation under inconsistent assumptions is such an important feature? Is this the only thing that goes wrong?____ >>> >>>> __ __ >>> >>>> Thorsten____ >>> >>>> __ __ >>> >>>> *From: *Agda on behalf of Jesper Cockx >>>> *Date: *Wednesday, 1 May 2019 at 08:48 >>>> *To: *Matthew Daggitt >>>> *Cc: *Agda mailing list >>>> *Subject: *Re: [Agda] Pattern matching on irrelevant types with only one constructor?____ >>> >>>> __ __ >>> >>>> Hi Matthew,____ >>> >>>> __ __ >>> >>>> In our paper on definitional proof irrelevance (https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it).____ >>> >>>> __ __ >>> >>>> A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ >>> >>>> __ __ >>> >>>> -- Jesper____ >>> >>>> __ __ >>> >>>> On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt wrote:____ >>> >>>>> In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor?____ >>> >>>>> __ __ >>> >>>>> Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas.____ >>> >>>>> ```____ >>> >>>>> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ >>> >>>>> gcd m zero _ _ = m____ >>> >>>>> gcd m (suc n) (acc rec) n>> >>>>> ```____ >>> >>>>> Many thanks,____ >>> >>>>> Matthew____ >>> >>>>> _______________________________________________ >>>>> Agda mailing list >>>>> Agda at lists.chalmers.se >>>>> https://lists.chalmers.se/mailman/listinfo/agda____ >>> >>>> This message and any attachment are intended solely for the addressee >>> and may contain confidential information. If you have received this >>> message in error, please contact the sender and delete the email and >>> attachment. >>> >>> Any views or opinions expressed by the author of this email do not >>> necessarily reflect the views of the University of Nottingham. Email >>> communications with the University of Nottingham may be monitored >>> where permitted by law. >>> >>> >>> >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From nad at cse.gu.se Thu May 2 11:46:09 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 2 May 2019 11:46:09 +0200 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: References: Message-ID: <8420ceaf-6b8e-037c-ff29-581a6f977096@cse.gu.se> On 02/05/2019 04.37, Matthew Daggitt wrote: > The standard library has now reached the point where it's taking > ~7GB of RAM to check which is obviously putting a strain on my 8GB > laptop. The library test is run with the -M1.5G RTS option, which sets the maximum heap size to 1.5 GB. -- /NAD From matthewdaggitt at gmail.com Thu May 2 12:07:51 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 2 May 2019 18:07:51 +0800 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: <8420ceaf-6b8e-037c-ff29-581a6f977096@cse.gu.se> References: <8420ceaf-6b8e-037c-ff29-581a6f977096@cse.gu.se> Message-ID: Thanks, it turns out I'd somehow accidentally switched to Agda-2.5.4.2.20190330-26835b4 without noticing, which clearly had some sort of performance regression. Using Agda-2.6.0 it now checks in under 1.5GB. I guess it would still be great if the wiki page on performance could be migrated to the new documentation and updated by someone in the know. Apologies, Matthew On Thu, May 2, 2019 at 5:46 PM Nils Anders Danielsson wrote: > On 02/05/2019 04.37, Matthew Daggitt wrote: > > The standard library has now reached the point where it's taking > > ~7GB of RAM to check which is obviously putting a strain on my 8GB > > laptop. > > The library test is run with the -M1.5G RTS option, which sets the > maximum heap size to 1.5 GB. > > -- > /NAD > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Thu May 2 13:10:56 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Thu, 2 May 2019 11:10:56 +0000 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: I call it "symbolic evaluation" or just "normalisation". I agree that the term "strong normalisation" is out of date, since we usually don't specify different normalisation strategies. I prefer to think of a congruence (judgemental or definitional equality) for which we can compute normal forms usually using a semantical (NBE) or an operational big-step normalisation function. The normalisation function should be sound (maps equal terms to identical normal forms), complete (the computed normal form is equal to the term we started with modulo the embedding of normal forms into terms) and stable (normalizing a normal form doesn't change anything, again modulo the embedding). Stability entails that we don't have too many normal forms. See our JFP paper on big step normalisation for example: http://www.cs.nott.ac.uk/~psztxa/publ/jtait07.pdf ?On 02/05/2019, 09:41, "Agda on behalf of Andrea Vezzosi" wrote: Is there an established term for "normalizing in an open context" because often I end up saying strong normalization for that, even if the part about _every_ reduction path is not quite relevant. On Wed, May 1, 2019 at 4:34 PM Jon Sterling wrote: > > Just to clarify, strong normalization (SN) is irrelevant here --- what is relevant is that there exists _some_ normalization strategy. Strong normalization is a property of an abstract rewriting system, a methodology which generally is not even considered for type theories which have strong type-directed equational rules, which tend to disrupt confluence. Modern Swedish-style type theories rely on techniques beyond abstract rewriting systems for their metatheory, and SN is therefore not coming into the picture. It is likely that Agda's core language is normalization in the general sense (there is a way to choose canonical representatives of definitional equivalence classses), and this is really orthogonal to SN/WN/etc (since "normalization" in the sense that I just described can be expressed without even mentioning an abstract rewriting system). > > To respond to Thorsten's comments a bit further down the thread, I tried really hard to make proof assistants without a complete decision procedure for typing practical, and I determined that it is not likely to work out. Decidable type checking is good. > > Best, > Jon > > > On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > > Well, if we don't have strong normalization we also lose decidability > > of typechecking, which is kind of an important design goal of Agda IMO. > > > > -- Jesper > > > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > > wrote: > > > I am just wondering with normalisation under inconsistent assumptions is such an important feature? Is this the only thing that goes wrong?____ > > > > > __ __ > > > > > Thorsten____ > > > > > __ __ > > > > > *From: *Agda on behalf of Jesper Cockx > > > *Date: *Wednesday, 1 May 2019 at 08:48 > > > *To: *Matthew Daggitt > > > *Cc: *Agda mailing list > > > *Subject: *Re: [Agda] Pattern matching on irrelevant types with only one constructor?____ > > > > > __ __ > > > > > Hi Matthew,____ > > > > > __ __ > > > > > In our paper on definitional proof irrelevance (https://hal.inria.fr/hal-01859964) we give a criterion for when it is allowed to pattern match on an irrelevant argument. As we argue in the paper, the condition that the datatype has a single constructor is neither sufficient nor necessary. The criterion we give is not yet implemented in Agda, but I hope to add it in the not-too-distant future (it depends on my PR https://github.com/agda/agda/pull/3589 being merged first). Unfortunately, the Acc datatype does not satisfy this criterion. In fact, allowing pattern matching on irrelevant Acc would break strong normalization of the theory, as you can always have an absurd hypothesis of type Acc but evaluation would not be blocked on this argument because it's irrelevant. So the best you can do is get propositional (instead of definitional) irrelevance by proving irrelevance of Acc by hand (or postulate it).____ > > > > > __ __ > > > > > A historical note: Agda used to allow matching on single-constructor datatypes under the --experimental-irrelevance flag, but this was completely broken so I decided to remove it last year (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > > > __ __ > > > > > -- Jesper____ > > > > > __ __ > > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt wrote:____ > > > > >> In the Agda documentation it is pretty clear that the only time you can pattern match against irrelevant arguments is when the type is empty. My own reasoning for this has always been that this is to stop decisions being made depending on the result of the pattern match. This leads me to wonder if there are any theoretical reasons why it's not possible to also mark a type irrelevant when it only has a single constructor?____ > > > > >> __ __ > > > > >> Consider the motivating example below. Clearly the `Acc` argument is never actually used in the computation of the final value, and no decisions can be based on its value as it only has a single constructor. It seems like it should be possible to mark it irrelevant. If this were possible then we would immediately get rid of a whole bunch of annoying congruence lemmas.____ > > > > >> ```____ > > > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > > > >> gcd m zero _ _ = m____ > > > > >> gcd m (suc n) (acc rec) n > > > >> ```____ > > > > >> Many thanks,____ > > > > >> Matthew____ > > > > >> _______________________________________________ > > >> Agda mailing list > > >> Agda at lists.chalmers.se > > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From mechvel at botik.ru Thu May 2 14:02:39 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Thu, 02 May 2019 15:02:39 +0300 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: References: <8420ceaf-6b8e-037c-ff29-581a6f977096@cse.gu.se> Message-ID: <1556798559.2361.7.camel@one.mechvel.pereslavl.ru> In the interactive mode, C-c C-l highlights in a particular color the place which is currently being type-checked. So that highlighting stops for long at the places which are expensive to type-check. This feature helped me (about two years ago) a couple of times to find a responsible place. -- SM On Thu, 2019-05-02 at 18:07 +0800, Matthew Daggitt wrote: > Thanks, it turns out I'd somehow accidentally switched to > Agda-2.5.4.2.20190330-26835b4 without noticing, which clearly had some > sort of performance regression. Using Agda-2.6.0 it now checks in > under 1.5GB. > > > I guess it would still be great if the wiki page on performance could > be migrated to the new documentation and updated by someone in the > know. > Apologies, > Matthew > > On Thu, May 2, 2019 at 5:46 PM Nils Anders Danielsson > wrote: > > On 02/05/2019 04.37, Matthew Daggitt wrote: > > The standard library has now reached the point where it's > taking > > ~7GB of RAM to check which is obviously putting a strain > on my 8GB > > laptop. > > The library test is run with the -M1.5G RTS option, which sets > the > maximum heap size to 1.5 GB. > > -- > /NAD > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From jon at jonmsterling.com Thu May 2 14:26:07 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Thu, 02 May 2019 08:26:07 -0400 Subject: [Agda] =?utf-8?q?Pattern_matching_on_irrelevant_types_with_only_?= =?utf-8?q?one_constructor=3F?= In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: I second this message from Thorsten :) I usually just call "normalization" the abstract idea of obtaining canonical representatives of equivalence classes by a function which is at least sound and complete in the sense Thorsten described, and I also like the stability criterion too. Indeed, I have noticed that a _lot_ of people are constantly talking about things like "strong normalization" in the context of a language for which an abstract rewriting system has never been defined, and it's really confusing --- maybe not as confusing to us, but probably very confusing for people who know only the definitions of these terms, and are puzzled as to whether we have somehow solved the well-known difficulties in rewriting theory that have made it unpopular as a basis for modern type theories. Worse, I even hear people talk about "confluence" for languages which (1) have never been based on abstract rewriting systems, and (2) the only reduction semantics ever considered was deterministic (!!). I perhaps do not need to explain why it is silly to talk about confluence for something that you already know to be deterministic ;-) I was hoping that this thread would be an opportunity for people to get conscious of the fact that SN/WN/confluence etc. are all about rewriting, which is very cool, but not closely related to what is happening in modern type theories of the Swedish tradition. Best, Jon On Thu, May 2, 2019, at 7:11 AM, Thorsten Altenkirch wrote: > I call it "symbolic evaluation" or just "normalisation". > > I agree that the term "strong normalisation" is out of date, since we > usually don't specify different normalisation strategies. I prefer to > think of a congruence (judgemental or definitional equality) for which > we can compute normal forms usually using a semantical (NBE) or an > operational big-step normalisation function. The normalisation function > should be sound (maps equal terms to identical normal forms), complete > (the computed normal form is equal to the term we started with modulo > the embedding of normal forms into terms) and stable (normalizing a > normal form doesn't change anything, again modulo the embedding). > Stability entails that we don't have too many normal forms. > > See our JFP paper on big step normalisation for example: > http://www.cs.nott.ac.uk/~psztxa/publ/jtait07.pdf > > ?On 02/05/2019, 09:41, "Agda on behalf of Andrea Vezzosi" > wrote: > > Is there an established term for "normalizing in an open context" > because often I end up saying strong normalization for that, even if > the part about _every_ reduction path is not quite relevant. > > > > > > On Wed, May 1, 2019 at 4:34 PM Jon Sterling > wrote: > > > > Just to clarify, strong normalization (SN) is irrelevant here --- > what is relevant is that there exists _some_ normalization strategy. > Strong normalization is a property of an abstract rewriting system, a > methodology which generally is not even considered for type theories > which have strong type-directed equational rules, which tend to disrupt > confluence. Modern Swedish-style type theories rely on techniques > beyond abstract rewriting systems for their metatheory, and SN is > therefore not coming into the picture. It is likely that Agda's core > language is normalization in the general sense (there is a way to > choose canonical representatives of definitional equivalence classses), > and this is really orthogonal to SN/WN/etc (since "normalization" in > the sense that I just described can be expressed without even > mentioning an abstract rewriting system). > > > > To respond to Thorsten's comments a bit further down the thread, > I tried really hard to make proof assistants without a complete > decision procedure for typing practical, and I determined that it is > not likely to work out. Decidable type checking is good. > > > > Best, > > Jon > > > > > > On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > > > Well, if we don't have strong normalization we also lose > decidability > > > of typechecking, which is kind of an important design goal of > Agda IMO. > > > > > > -- Jesper > > > > > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > > > wrote: > > > > I am just wondering with normalisation under inconsistent > assumptions is such an important feature? Is this the only thing that > goes wrong?____ > > > > > > > __ __ > > > > > > > Thorsten____ > > > > > > > __ __ > > > > > > > *From: *Agda on behalf of > Jesper Cockx > > > > *Date: *Wednesday, 1 May 2019 at 08:48 > > > > *To: *Matthew Daggitt > > > > *Cc: *Agda mailing list > > > > *Subject: *Re: [Agda] Pattern matching on irrelevant types > with only one constructor?____ > > > > > > > __ __ > > > > > > > Hi Matthew,____ > > > > > > > __ __ > > > > > > > In our paper on definitional proof irrelevance > (https://hal.inria.fr/hal-01859964) we give a criterion for when it is > allowed to pattern match on an irrelevant argument. As we argue in the > paper, the condition that the datatype has a single constructor is > neither sufficient nor necessary. The criterion we give is not yet > implemented in Agda, but I hope to add it in the not-too-distant future > (it depends on my PR https://github.com/agda/agda/pull/3589 being > merged first). Unfortunately, the Acc datatype does not satisfy this > criterion. In fact, allowing pattern matching on irrelevant Acc would > break strong normalization of the theory, as you can always have an > absurd hypothesis of type Acc but evaluation would not be blocked on > this argument because it's irrelevant. So the best you can do is get > propositional (instead of definitional) irrelevance by proving > irrelevance of Acc by hand (or postulate it).____ > > > > > > > __ __ > > > > > > > A historical note: Agda used to allow matching on > single-constructor datatypes under the --experimental-irrelevance flag, > but this was completely broken so I decided to remove it last year > (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > > > > > __ __ > > > > > > > -- Jesper____ > > > > > > > __ __ > > > > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > wrote:____ > > > > > > >> In the Agda documentation > it is > pretty clear that the only time you can pattern match against > irrelevant arguments is when the type is empty. My own reasoning for > this has always been that this is to stop decisions being made > depending on the result of the pattern match. This leads me to wonder > if there are any theoretical reasons why it's not possible to also mark > a type irrelevant when it only has a single constructor?____ > > > > > > >> __ __ > > > > > > >> Consider the motivating example below. Clearly the `Acc` > argument is never actually used in the computation of the final value, > and no decisions can be based on its value as it only has a single > constructor. It seems like it should be possible to mark it irrelevant. > If this were possible then we would immediately get rid of a whole > bunch of annoying congruence lemmas.____ > > > > > > >> ```____ > > > > > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > > > > > >> gcd m zero _ _ = m____ > > > > > > >> gcd m (suc n) (acc rec) n _ n > > > > > >> ```____ > > > > > > >> Many thanks,____ > > > > > > >> Matthew____ > > > > > > >> _______________________________________________ > > > >> Agda mailing list > > > >> Agda at lists.chalmers.se > > > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > > > > > This message and any attachment are intended solely for the > addressee > > > and may contain confidential information. If you have received > this > > > message in error, please contact the sender and delete the > email and > > > attachment. > > > > > > Any views or opinions expressed by the author of this email do > not > > > necessarily reflect the views of the University of Nottingham. > Email > > > communications with the University of Nottingham may be > monitored > > > where permitted by law. > > > > > > > > > > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > From Jesper at sikanda.be Thu May 2 14:41:09 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Thu, 2 May 2019 14:41:09 +0200 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: Hi Jon, I feel personally addressed when you talk about "people talking about confluence" so let me try to formulate a response. I would argue that confluence (or at least something like it) *is* an important consideration also for languages like Agda and Coq. The reason why is because in practice evaluation is often non-deterministic because of unsolved metavariables: if evaluation is blocked on a metavariable, we often still want to try other evaluation rules that might fire. But we can only do this if the order in which we apply the evaluation rules doesn't matter (which is the meaning of 'confluence' to me). So in some sense confluence allows us to abstract over the concrete (deterministic) evaluation strategy and choose whatever strategy we like for our reasoning. In the end, this helps towards the goal of enabling people to use our languages without having to understand all the implementation details. -- Jesper On Thu, May 2, 2019 at 2:27 PM Jon Sterling wrote: > I second this message from Thorsten :) I usually just call "normalization" > the abstract idea of obtaining canonical representatives of equivalence > classes by a function which is at least sound and complete in the sense > Thorsten described, and I also like the stability criterion too. > > Indeed, I have noticed that a _lot_ of people are constantly talking about > things like "strong normalization" in the context of a language for which > an abstract rewriting system has never been defined, and it's really > confusing --- maybe not as confusing to us, but probably very confusing for > people who know only the definitions of these terms, and are puzzled as to > whether we have somehow solved the well-known difficulties in rewriting > theory that have made it unpopular as a basis for modern type theories. > Worse, I even hear people talk about "confluence" for languages which (1) > have never been based on abstract rewriting systems, and (2) the only > reduction semantics ever considered was deterministic (!!). I perhaps do > not need to explain why it is silly to talk about confluence for something > that you already know to be deterministic ;-) > > I was hoping that this thread would be an opportunity for people to get > conscious of the fact that SN/WN/confluence etc. are all about rewriting, > which is very cool, but not closely related to what is happening in modern > type theories of the Swedish tradition. > > Best, > Jon > > > On Thu, May 2, 2019, at 7:11 AM, Thorsten Altenkirch wrote: > > I call it "symbolic evaluation" or just "normalisation". > > > > I agree that the term "strong normalisation" is out of date, since we > > usually don't specify different normalisation strategies. I prefer to > > think of a congruence (judgemental or definitional equality) for which > > we can compute normal forms usually using a semantical (NBE) or an > > operational big-step normalisation function. The normalisation function > > should be sound (maps equal terms to identical normal forms), complete > > (the computed normal form is equal to the term we started with modulo > > the embedding of normal forms into terms) and stable (normalizing a > > normal form doesn't change anything, again modulo the embedding). > > Stability entails that we don't have too many normal forms. > > > > See our JFP paper on big step normalisation for example: > > http://www.cs.nott.ac.uk/~psztxa/publ/jtait07.pdf > > > > ?On 02/05/2019, 09:41, "Agda on behalf of Andrea Vezzosi" > > wrote: > > > > Is there an established term for "normalizing in an open context" > > because often I end up saying strong normalization for that, even if > > the part about _every_ reduction path is not quite relevant. > > > > > > > > > > > > On Wed, May 1, 2019 at 4:34 PM Jon Sterling > > wrote: > > > > > > Just to clarify, strong normalization (SN) is irrelevant here --- > > what is relevant is that there exists _some_ normalization strategy. > > Strong normalization is a property of an abstract rewriting system, a > > methodology which generally is not even considered for type theories > > which have strong type-directed equational rules, which tend to disrupt > > confluence. Modern Swedish-style type theories rely on techniques > > beyond abstract rewriting systems for their metatheory, and SN is > > therefore not coming into the picture. It is likely that Agda's core > > language is normalization in the general sense (there is a way to > > choose canonical representatives of definitional equivalence classses), > > and this is really orthogonal to SN/WN/etc (since "normalization" in > > the sense that I just described can be expressed without even > > mentioning an abstract rewriting system). > > > > > > To respond to Thorsten's comments a bit further down the thread, > > I tried really hard to make proof assistants without a complete > > decision procedure for typing practical, and I determined that it is > > not likely to work out. Decidable type checking is good. > > > > > > Best, > > > Jon > > > > > > > > > On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > > > > Well, if we don't have strong normalization we also lose > > decidability > > > > of typechecking, which is kind of an important design goal of > > Agda IMO. > > > > > > > > -- Jesper > > > > > > > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > > > > wrote: > > > > > I am just wondering with normalisation under inconsistent > > assumptions is such an important feature? Is this the only thing that > > goes wrong?____ > > > > > > > > > __ __ > > > > > > > > > Thorsten____ > > > > > > > > > __ __ > > > > > > > > > *From: *Agda on behalf of > > Jesper Cockx > > > > > *Date: *Wednesday, 1 May 2019 at 08:48 > > > > > *To: *Matthew Daggitt > > > > > *Cc: *Agda mailing list > > > > > *Subject: *Re: [Agda] Pattern matching on irrelevant types > > with only one constructor?____ > > > > > > > > > __ __ > > > > > > > > > Hi Matthew,____ > > > > > > > > > __ __ > > > > > > > > > In our paper on definitional proof irrelevance > > (https://hal.inria.fr/hal-01859964) we give a criterion for when it is > > allowed to pattern match on an irrelevant argument. As we argue in the > > paper, the condition that the datatype has a single constructor is > > neither sufficient nor necessary. The criterion we give is not yet > > implemented in Agda, but I hope to add it in the not-too-distant future > > (it depends on my PR https://github.com/agda/agda/pull/3589 being > > merged first). Unfortunately, the Acc datatype does not satisfy this > > criterion. In fact, allowing pattern matching on irrelevant Acc would > > break strong normalization of the theory, as you can always have an > > absurd hypothesis of type Acc but evaluation would not be blocked on > > this argument because it's irrelevant. So the best you can do is get > > propositional (instead of definitional) irrelevance by proving > > irrelevance of Acc by hand (or postulate it).____ > > > > > > > > > __ __ > > > > > > > > > A historical note: Agda used to allow matching on > > single-constructor datatypes under the --experimental-irrelevance flag, > > but this was completely broken so I decided to remove it last year > > ( > https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > > > > > > > __ __ > > > > > > > > > -- Jesper____ > > > > > > > > > __ __ > > > > > > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > > wrote:____ > > > > > > > > >> In the Agda documentation > > it is > > pretty clear that the only time you can pattern match against > > irrelevant arguments is when the type is empty. My own reasoning for > > this has always been that this is to stop decisions being made > > depending on the result of the pattern match. This leads me to wonder > > if there are any theoretical reasons why it's not possible to also mark > > a type irrelevant when it only has a single constructor?____ > > > > > > > > >> __ __ > > > > > > > > >> Consider the motivating example below. Clearly the `Acc` > > argument is never actually used in the computation of the final value, > > and no decisions can be based on its value as it only has a single > > constructor. It seems like it should be possible to mark it irrelevant. > > If this were possible then we would immediately get rid of a whole > > bunch of annoying congruence lemmas.____ > > > > > > > > >> ```____ > > > > > > > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > > > > > > > >> gcd m zero _ _ = m____ > > > > > > > > >> gcd m (suc n) (acc rec) n > _ n > > > > > > > >> ```____ > > > > > > > > >> Many thanks,____ > > > > > > > > >> Matthew____ > > > > > > > > >> _______________________________________________ > > > > >> Agda mailing list > > > > >> Agda at lists.chalmers.se > > > > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > > > > > > > This message and any attachment are intended solely for the > > addressee > > > > and may contain confidential information. If you have received > > this > > > > message in error, please contact the sender and delete the > > email and > > > > attachment. > > > > > > > > Any views or opinions expressed by the author of this email do > > not > > > > necessarily reflect the views of the University of Nottingham. > > Email > > > > communications with the University of Nottingham may be > > monitored > > > > where permitted by law. > > > > > > > > > > > > > > > > _______________________________________________ > > > > Agda mailing list > > > > Agda at lists.chalmers.se > > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From melkon.or at gmail.com Thu May 2 14:44:07 2019 From: melkon.or at gmail.com (Orestis Melkonian) Date: Thu, 2 May 2019 14:44:07 +0200 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: <1556798559.2361.7.camel@one.mechvel.pereslavl.ru> References: <8420ceaf-6b8e-037c-ff29-581a6f977096@cse.gu.se> <1556798559.2361.7.camel@one.mechvel.pereslavl.ru> Message-ID: Just to clarify, you need to activate the highlighting feature for emacs: (add-hook 'agda2-mode-hook ? (lambda () ??? (setq agda2-highlight-level 'interactive))) --OM On 02-05-19 14:02, Sergei Meshveliani wrote: > In the interactive mode, C-c C-l highlights in a particular color the > place which is currently being type-checked. So that highlighting stops > for long at the places which are expensive to type-check. > This feature helped me (about two years ago) a couple of times to find a > responsible place. > > -- > SM > > > On Thu, 2019-05-02 at 18:07 +0800, Matthew Daggitt wrote: >> Thanks, it turns out I'd somehow accidentally switched to >> Agda-2.5.4.2.20190330-26835b4 without noticing, which clearly had some >> sort of performance regression. Using Agda-2.6.0 it now checks in >> under 1.5GB. >> >> >> I guess it would still be great if the wiki page on performance could >> be migrated to the new documentation and updated by someone in the >> know. >> Apologies, >> Matthew >> >> On Thu, May 2, 2019 at 5:46 PM Nils Anders Danielsson >> wrote: >> >> On 02/05/2019 04.37, Matthew Daggitt wrote: >> > The standard library has now reached the point where it's >> taking >> > ~7GB of RAM to check which is obviously putting a strain >> on my 8GB >> > laptop. >> >> The library test is run with the -M1.5G RTS option, which sets >> the >> maximum heap size to 1.5 GB. >> >> -- >> /NAD >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From jon at jonmsterling.com Thu May 2 14:53:24 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Thu, 02 May 2019 08:53:24 -0400 Subject: [Agda] =?utf-8?q?Pattern_matching_on_irrelevant_types_with_only_?= =?utf-8?q?one_constructor=3F?= In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: Hi Jesper, I wasn't thinking of anyone in particular, but since you bring it up --- I agree that there is an informal / intuitive connection to confluence, and that it is likely possible to make it precise considering the dynamics _not_ of the Agda language, but of its elaboration process. I think that rewriting could be a good tool to study this, and my point about confluence is that it is a technical term with a technical meaning about a specific kind of technical object, and yet there is no clear / precise referent in the current setting. Maybe we can use a different word to describe this intuitive property, at least until someone has worked out the connection to rewriting. Best, Jon On Thu, May 2, 2019, at 8:41 AM, Jesper Cockx wrote: > Hi Jon, > > I feel personally addressed when you talk about "people talking about > confluence" so let me try to formulate a response. I would argue that > confluence (or at least something like it) *is* an important > consideration also for languages like Agda and Coq. The reason why is > because in practice evaluation is often non-deterministic because of > unsolved metavariables: if evaluation is blocked on a metavariable, we > often still want to try other evaluation rules that might fire. But we > can only do this if the order in which we apply the evaluation rules > doesn't matter (which is the meaning of 'confluence' to me). So in some > sense confluence allows us to abstract over the concrete > (deterministic) evaluation strategy and choose whatever strategy we > like for our reasoning. In the end, this helps towards the goal of > enabling people to use our languages without having to understand all > the implementation details. > > -- Jesper > > On Thu, May 2, 2019 at 2:27 PM Jon Sterling wrote: > > I second this message from Thorsten :) I usually just call "normalization" the abstract idea of obtaining canonical representatives of equivalence classes by a function which is at least sound and complete in the sense Thorsten described, and I also like the stability criterion too. > > > > Indeed, I have noticed that a _lot_ of people are constantly talking about things like "strong normalization" in the context of a language for which an abstract rewriting system has never been defined, and it's really confusing --- maybe not as confusing to us, but probably very confusing for people who know only the definitions of these terms, and are puzzled as to whether we have somehow solved the well-known difficulties in rewriting theory that have made it unpopular as a basis for modern type theories. Worse, I even hear people talk about "confluence" for languages which (1) have never been based on abstract rewriting systems, and (2) the only reduction semantics ever considered was deterministic (!!). I perhaps do not need to explain why it is silly to talk about confluence for something that you already know to be deterministic ;-) > > > > I was hoping that this thread would be an opportunity for people to get conscious of the fact that SN/WN/confluence etc. are all about rewriting, which is very cool, but not closely related to what is happening in modern type theories of the Swedish tradition. > > > > Best, > > Jon > > > > > > On Thu, May 2, 2019, at 7:11 AM, Thorsten Altenkirch wrote: > > > I call it "symbolic evaluation" or just "normalisation". > > > > > > I agree that the term "strong normalisation" is out of date, since we > > > usually don't specify different normalisation strategies. I prefer to > > > think of a congruence (judgemental or definitional equality) for which > > > we can compute normal forms usually using a semantical (NBE) or an > > > operational big-step normalisation function. The normalisation function > > > should be sound (maps equal terms to identical normal forms), complete > > > (the computed normal form is equal to the term we started with modulo > > > the embedding of normal forms into terms) and stable (normalizing a > > > normal form doesn't change anything, again modulo the embedding). > > > Stability entails that we don't have too many normal forms. > > > > > > See our JFP paper on big step normalisation for example: > > > http://www.cs.nott.ac.uk/~psztxa/publ/jtait07.pdf > > > > > > On 02/05/2019, 09:41, "Agda on behalf of Andrea Vezzosi" > > > wrote: > > > > > > Is there an established term for "normalizing in an open context" > > > because often I end up saying strong normalization for that, even if > > > the part about _every_ reduction path is not quite relevant. > > > > > > > > > > > > > > > > > > On Wed, May 1, 2019 at 4:34 PM Jon Sterling > > > wrote: > > > > > > > > Just to clarify, strong normalization (SN) is irrelevant here --- > > > what is relevant is that there exists _some_ normalization strategy. > > > Strong normalization is a property of an abstract rewriting system, a > > > methodology which generally is not even considered for type theories > > > which have strong type-directed equational rules, which tend to disrupt > > > confluence. Modern Swedish-style type theories rely on techniques > > > beyond abstract rewriting systems for their metatheory, and SN is > > > therefore not coming into the picture. It is likely that Agda's core > > > language is normalization in the general sense (there is a way to > > > choose canonical representatives of definitional equivalence classses), > > > and this is really orthogonal to SN/WN/etc (since "normalization" in > > > the sense that I just described can be expressed without even > > > mentioning an abstract rewriting system). > > > > > > > > To respond to Thorsten's comments a bit further down the thread, > > > I tried really hard to make proof assistants without a complete > > > decision procedure for typing practical, and I determined that it is > > > not likely to work out. Decidable type checking is good. > > > > > > > > Best, > > > > Jon > > > > > > > > > > > > On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > > > > > Well, if we don't have strong normalization we also lose > > > decidability > > > > > of typechecking, which is kind of an important design goal of > > > Agda IMO. > > > > > > > > > > -- Jesper > > > > > > > > > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > > > > > wrote: > > > > > > I am just wondering with normalisation under inconsistent > > > assumptions is such an important feature? Is this the only thing that > > > goes wrong?____ > > > > > > > > > > > __ __ > > > > > > > > > > > Thorsten____ > > > > > > > > > > > __ __ > > > > > > > > > > > *From: *Agda on behalf of > > > Jesper Cockx > > > > > > *Date: *Wednesday, 1 May 2019 at 08:48 > > > > > > *To: *Matthew Daggitt > > > > > > *Cc: *Agda mailing list > > > > > > *Subject: *Re: [Agda] Pattern matching on irrelevant types > > > with only one constructor?____ > > > > > > > > > > > __ __ > > > > > > > > > > > Hi Matthew,____ > > > > > > > > > > > __ __ > > > > > > > > > > > In our paper on definitional proof irrelevance > > > (https://hal.inria.fr/hal-01859964) we give a criterion for when it is > > > allowed to pattern match on an irrelevant argument. As we argue in the > > > paper, the condition that the datatype has a single constructor is > > > neither sufficient nor necessary. The criterion we give is not yet > > > implemented in Agda, but I hope to add it in the not-too-distant future > > > (it depends on my PR https://github.com/agda/agda/pull/3589 being > > > merged first). Unfortunately, the Acc datatype does not satisfy this > > > criterion. In fact, allowing pattern matching on irrelevant Acc would > > > break strong normalization of the theory, as you can always have an > > > absurd hypothesis of type Acc but evaluation would not be blocked on > > > this argument because it's irrelevant. So the best you can do is get > > > propositional (instead of definitional) irrelevance by proving > > > irrelevance of Acc by hand (or postulate it).____ > > > > > > > > > > > __ __ > > > > > > > > > > > A historical note: Agda used to allow matching on > > > single-constructor datatypes under the --experimental-irrelevance flag, > > > but this was completely broken so I decided to remove it last year > > > (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > > > > > > > > > __ __ > > > > > > > > > > > -- Jesper____ > > > > > > > > > > > __ __ > > > > > > > > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > > > wrote:____ > > > > > > > > > > >> In the Agda documentation > > > it is > > > pretty clear that the only time you can pattern match against > > > irrelevant arguments is when the type is empty. My own reasoning for > > > this has always been that this is to stop decisions being made > > > depending on the result of the pattern match. This leads me to wonder > > > if there are any theoretical reasons why it's not possible to also mark > > > a type irrelevant when it only has a single constructor?____ > > > > > > > > > > >> __ __ > > > > > > > > > > >> Consider the motivating example below. Clearly the `Acc` > > > argument is never actually used in the computation of the final value, > > > and no decisions can be based on its value as it only has a single > > > constructor. It seems like it should be possible to mark it irrelevant. > > > If this were possible then we would immediately get rid of a whole > > > bunch of annoying congruence lemmas.____ > > > > > > > > > > >> ```____ > > > > > > > > > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > > > > > > > > > >> gcd m zero _ _ = m____ > > > > > > > > > > >> gcd m (suc n) (acc rec) n > > _ n > > > > > > > > > >> ```____ > > > > > > > > > > >> Many thanks,____ > > > > > > > > > > >> Matthew____ > > > > > > > > > > >> _______________________________________________ > > > > > >> Agda mailing list > > > > > >> Agda at lists.chalmers.se > > > > > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > > > > > > > > > This message and any attachment are intended solely for the > > > addressee > > > > > and may contain confidential information. If you have received > > > this > > > > > message in error, please contact the sender and delete the > > > email and > > > > > attachment. > > > > > > > > > > Any views or opinions expressed by the author of this email do > > > not > > > > > necessarily reflect the views of the University of Nottingham. > > > Email > > > > > communications with the University of Nottingham may be > > > monitored > > > > > where permitted by law. > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > Agda mailing list > > > > > Agda at lists.chalmers.se > > > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > _______________________________________________ > > > > Agda mailing list > > > > Agda at lists.chalmers.se > > > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > > > and may contain confidential information. If you have received this > > > message in error, please contact the sender and delete the email and > > > attachment. > > > > > > Any views or opinions expressed by the author of this email do not > > > necessarily reflect the views of the University of Nottingham. Email > > > communications with the University of Nottingham may be monitored > > > where permitted by law. > > > > > > > > > > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda From Thorsten.Altenkirch at nottingham.ac.uk Thu May 2 14:55:36 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Thu, 2 May 2019 12:55:36 +0000 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? In-Reply-To: References: <9eb0004d-725d-401b-bba8-ae9186307885@www.fastmail.com> Message-ID: <5A0ADAEF-055E-4DB0-8E9E-1A6A345D1E68@exmail.nottingham.ac.uk> Hi Jesper, I was thinking just about deciding definitional equality, confluence somehow becomes an aspect of soundness, I think. But certainly dealing with Metavariables is a very important issue. Do you think one needs small step semantics to specify this or isn?t it rather the case that you deal with a set of constraints and there is some non-determinism which constraints are simplified next and that the final result is independent of these choices is what is referred to as confluence? Thorsten From: Jesper Cockx Date: Thursday, 2 May 2019 at 13:41 To: Jon Sterling Cc: Thorsten Altenkirch , Andrea Vezzosi , agda Subject: Re: [Agda] Pattern matching on irrelevant types with only one constructor? Hi Jon, I feel personally addressed when you talk about "people talking about confluence" so let me try to formulate a response. I would argue that confluence (or at least something like it) *is* an important consideration also for languages like Agda and Coq. The reason why is because in practice evaluation is often non-deterministic because of unsolved metavariables: if evaluation is blocked on a metavariable, we often still want to try other evaluation rules that might fire. But we can only do this if the order in which we apply the evaluation rules doesn't matter (which is the meaning of 'confluence' to me). So in some sense confluence allows us to abstract over the concrete (deterministic) evaluation strategy and choose whatever strategy we like for our reasoning. In the end, this helps towards the goal of enabling people to use our languages without having to understand all the implementation details. -- Jesper On Thu, May 2, 2019 at 2:27 PM Jon Sterling > wrote: I second this message from Thorsten :) I usually just call "normalization" the abstract idea of obtaining canonical representatives of equivalence classes by a function which is at least sound and complete in the sense Thorsten described, and I also like the stability criterion too. Indeed, I have noticed that a _lot_ of people are constantly talking about things like "strong normalization" in the context of a language for which an abstract rewriting system has never been defined, and it's really confusing --- maybe not as confusing to us, but probably very confusing for people who know only the definitions of these terms, and are puzzled as to whether we have somehow solved the well-known difficulties in rewriting theory that have made it unpopular as a basis for modern type theories. Worse, I even hear people talk about "confluence" for languages which (1) have never been based on abstract rewriting systems, and (2) the only reduction semantics ever considered was deterministic (!!). I perhaps do not need to explain why it is silly to talk about confluence for something that you already know to be deterministic ;-) I was hoping that this thread would be an opportunity for people to get conscious of the fact that SN/WN/confluence etc. are all about rewriting, which is very cool, but not closely related to what is happening in modern type theories of the Swedish tradition. Best, Jon On Thu, May 2, 2019, at 7:11 AM, Thorsten Altenkirch wrote: > I call it "symbolic evaluation" or just "normalisation". > > I agree that the term "strong normalisation" is out of date, since we > usually don't specify different normalisation strategies. I prefer to > think of a congruence (judgemental or definitional equality) for which > we can compute normal forms usually using a semantical (NBE) or an > operational big-step normalisation function. The normalisation function > should be sound (maps equal terms to identical normal forms), complete > (the computed normal form is equal to the term we started with modulo > the embedding of normal forms into terms) and stable (normalizing a > normal form doesn't change anything, again modulo the embedding). > Stability entails that we don't have too many normal forms. > > See our JFP paper on big step normalisation for example: > http://www.cs.nott.ac.uk/~psztxa/publ/jtait07.pdf > > On 02/05/2019, 09:41, "Agda on behalf of Andrea Vezzosi" > on behalf of sanzhiyan at gmail.com> wrote: > > Is there an established term for "normalizing in an open context" > because often I end up saying strong normalization for that, even if > the part about _every_ reduction path is not quite relevant. > > > > > > On Wed, May 1, 2019 at 4:34 PM Jon Sterling > > wrote: > > > > Just to clarify, strong normalization (SN) is irrelevant here --- > what is relevant is that there exists _some_ normalization strategy. > Strong normalization is a property of an abstract rewriting system, a > methodology which generally is not even considered for type theories > which have strong type-directed equational rules, which tend to disrupt > confluence. Modern Swedish-style type theories rely on techniques > beyond abstract rewriting systems for their metatheory, and SN is > therefore not coming into the picture. It is likely that Agda's core > language is normalization in the general sense (there is a way to > choose canonical representatives of definitional equivalence classses), > and this is really orthogonal to SN/WN/etc (since "normalization" in > the sense that I just described can be expressed without even > mentioning an abstract rewriting system). > > > > To respond to Thorsten's comments a bit further down the thread, > I tried really hard to make proof assistants without a complete > decision procedure for typing practical, and I determined that it is > not likely to work out. Decidable type checking is good. > > > > Best, > > Jon > > > > > > On Wed, May 1, 2019, at 6:33 AM, Jesper Cockx wrote: > > > Well, if we don't have strong normalization we also lose > decidability > > > of typechecking, which is kind of an important design goal of > Agda IMO. > > > > > > -- Jesper > > > > > > On Wed, May 1, 2019 at 12:17 PM Thorsten Altenkirch > > > > wrote: > > > > I am just wondering with normalisation under inconsistent > assumptions is such an important feature? Is this the only thing that > goes wrong?____ > > > > > > > __ __ > > > > > > > Thorsten____ > > > > > > > __ __ > > > > > > > *From: *Agda > on behalf of > Jesper Cockx > > > > > *Date: *Wednesday, 1 May 2019 at 08:48 > > > > *To: *Matthew Daggitt > > > > > *Cc: *Agda mailing list > > > > > *Subject: *Re: [Agda] Pattern matching on irrelevant types > with only one constructor?____ > > > > > > > __ __ > > > > > > > Hi Matthew,____ > > > > > > > __ __ > > > > > > > In our paper on definitional proof irrelevance > (https://hal.inria.fr/hal-01859964) we give a criterion for when it is > allowed to pattern match on an irrelevant argument. As we argue in the > paper, the condition that the datatype has a single constructor is > neither sufficient nor necessary. The criterion we give is not yet > implemented in Agda, but I hope to add it in the not-too-distant future > (it depends on my PR https://github.com/agda/agda/pull/3589 being > merged first). Unfortunately, the Acc datatype does not satisfy this > criterion. In fact, allowing pattern matching on irrelevant Acc would > break strong normalization of the theory, as you can always have an > absurd hypothesis of type Acc but evaluation would not be blocked on > this argument because it's irrelevant. So the best you can do is get > propositional (instead of definitional) irrelevance by proving > irrelevance of Acc by hand (or postulate it).____ > > > > > > > __ __ > > > > > > > A historical note: Agda used to allow matching on > single-constructor datatypes under the --experimental-irrelevance flag, > but this was completely broken so I decided to remove it last year > (https://github.com/agda/agda/commit/b5f8b509bbe362c4bbb14612a6666e720cabf26a)____ > > > > > > > __ __ > > > > > > > -- Jesper____ > > > > > > > __ __ > > > > > > > On Wed, May 1, 2019 at 8:33 AM Matthew Daggitt > > wrote:____ > > > > > > >> In the Agda documentation > it is > pretty clear that the only time you can pattern match against > irrelevant arguments is when the type is empty. My own reasoning for > this has always been that this is to stop decisions being made > depending on the result of the pattern match. This leads me to wonder > if there are any theoretical reasons why it's not possible to also mark > a type irrelevant when it only has a single constructor?____ > > > > > > >> __ __ > > > > > > >> Consider the motivating example below. Clearly the `Acc` > argument is never actually used in the computation of the final value, > and no decisions can be based on its value as it only has a single > constructor. It seems like it should be possible to mark it irrelevant. > If this were possible then we would immediately get rid of a whole > bunch of annoying congruence lemmas.____ > > > > > > >> ```____ > > > > > > >> gcd : (m n : ?) ? Acc _<_ m ? n < m ? ?____ > > > > > > >> gcd m zero _ _ = m____ > > > > > > >> gcd m (suc n) (acc rec) n _ n > > > > > >> ```____ > > > > > > >> Many thanks,____ > > > > > > >> Matthew____ > > > > > > >> _______________________________________________ > > > >> Agda mailing list > > > >> Agda at lists.chalmers.se > > > >> https://lists.chalmers.se/mailman/listinfo/agda____ > > > > > > > This message and any attachment are intended solely for the > addressee > > > and may contain confidential information. If you have received > this > > > message in error, please contact the sender and delete the > email and > > > attachment. > > > > > > Any views or opinions expressed by the author of this email do > not > > > necessarily reflect the views of the University of Nottingham. > Email > > > communications with the University of Nottingham may be > monitored > > > where permitted by law. > > > > > > > > > > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kahl at cas.mcmaster.ca Fri May 3 04:52:37 2019 From: kahl at cas.mcmaster.ca (Wolfram Kahl) Date: Thu, 2 May 2019 22:52:37 -0400 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: References: Message-ID: <20190503025237.GU21128@ritchie.cas.mcmaster.ca> On Thu, May 02, 2019 at 10:37:36AM +0800, Matthew Daggitt wrote: > The standard library has now reached the point where it's taking ~7GB of > RAM to check How did you measure? htop only tells you how much memory it uses, not how much it needs. The GHC run-time system happily continues allocating if you let it, hoping it never has to collect garbage... What RTS options did you use? Adding the options +RTS -s -RTS gives you ``maximum residency'' which is most likely a lower bound for the heap you really need. Later messages said that checking std-lib works with: +RTS -M1.5G -RTS I would then recommend to use: +RTS -M1.5G -H1.5G -A128M -RTS Perhaps further fiddling with the allocation area size can make it faster, but this rough magnitude should already be much faster than the default. And for knowing more about what is going on: +RTS -M1.5G -H1.5G -A128M -S -RTS In Emacs on a 16G machine I currently have: '(agda2-program-args (quote ("+RTS" "-K256M" "-H6G" "-M6G" "-A128M" "-S/var/tmp/kahl/AgdaRTS.log" "-RTS" "-i" "."))) (And then I run tail -f /var/tmp/kahl/AgdaRTS.log in a terminal to see how the heap moves while nothing moves in the emacs interaction... ) (``-K256M'' for the stack only because I need it.) On an 8GB machine, I would normally use no more than 5G of heap, and for routine use and with small projects probably 2G. For everybody venturing beyond simple exercises: NEVER RUN AGDA WITHOUT +RTS -M<>G -RTS !!! (Including from within Emacs!) And read: https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#rts-options-to-control-the-garbage-collector If you called Agda without -M and it starts swapping, kill it --- no point in waiting. Wolfram From matthewdaggitt at gmail.com Fri May 3 06:13:40 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Fri, 3 May 2019 12:13:40 +0800 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: <20190503025237.GU21128@ritchie.cas.mcmaster.ca> References: <20190503025237.GU21128@ritchie.cas.mcmaster.ca> Message-ID: Thanks Wolfram, that's really useful. What RTS options did you use? None. The ones you suggested did indeed speed up type checking by 20%, thanks! Maybe you could add a small page to the documentation with some general suggestions? Or at least a link to the Haskell RTS documentation. I'd never even heard of the RTS options before. Best, Matthew On Fri, May 3, 2019 at 10:52 AM Wolfram Kahl wrote: > On Thu, May 02, 2019 at 10:37:36AM +0800, Matthew Daggitt wrote: > > The standard library has now reached the point where it's taking ~7GB of > > RAM to check > > How did you measure? htop only tells you how much memory it uses, not > how much it needs. The GHC run-time system happily continues > allocating if you let it, hoping it never has to collect garbage... > > What RTS options did you use? > > Adding the options > > +RTS -s -RTS > > gives you ``maximum residency'' which is most likely a lower bound for > the heap you really need. > > Later messages said that checking std-lib works with: > > +RTS -M1.5G -RTS > > I would then recommend to use: > > +RTS -M1.5G -H1.5G -A128M -RTS > > Perhaps further fiddling with the allocation area size can make it > faster, but this rough magnitude should already be much faster than > the default. > > And for knowing more about what is going on: > > +RTS -M1.5G -H1.5G -A128M -S -RTS > > In Emacs on a 16G machine I currently have: > > '(agda2-program-args > (quote > ("+RTS" "-K256M" "-H6G" "-M6G" "-A128M" "-S/var/tmp/kahl/AgdaRTS.log" > "-RTS" "-i" "."))) > > (And then I run > > tail -f /var/tmp/kahl/AgdaRTS.log > > in a terminal to see how the heap moves while nothing moves in the > emacs interaction... > ) > (``-K256M'' for the stack only because I need it.) > > > On an 8GB machine, I would normally use no more than 5G of heap, and for > routine use and with small projects probably 2G. > > > For everybody venturing beyond simple exercises: > > NEVER RUN AGDA WITHOUT > > +RTS -M<>G -RTS > > !!! (Including from within Emacs!) > And read: > > https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/runtime_control.html#rts-options-to-control-the-garbage-collector > > If you called Agda without -M and it starts swapping, kill it --- no > point in waiting. > > > Wolfram > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at botik.ru Fri May 3 15:36:16 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Fri, 03 May 2019 16:36:16 +0300 Subject: [Agda] BF library announcement Message-ID: <1556890576.2409.9.camel@one.mechvel.pereslavl.ru> BFLib 0.1 -- a library of certified Agda programs for arithmetic of Binary Integer numbers and Generic Fractions is available on http://www.botik.ru/pub/local/Mechveliani/bfLib/, ftp://ftp.botik.ru/pub/local/Mechveliani/bfLib/, https://github.com/mechvel/BFLib-0.1 (see license.txt in the archive). BFLib-0.1 is a pure, regular-performance, complete, and certified binary arithmetic for integer numbers, and the arithmetic of fractions in the general case of fractions over an arbitrary GCDRing. It has been tested under Agda 2.6.0, MAlonzo, ghc-8.6.3. It is suggested as a replacement (with possible changes) for the Bin and Rational parts in Standard library lib-1.0. BFLib suggests the three improvements. (I) Essentially faster implementation for `<-cmp', show, gcd for Nat, and for arithmetic of rational numbers. (II) New Bin part. (III) Generic Fraction domain constructor. The Bin part of the library improves the Standard library in three ways. * It has many operations and proofs that are important and necessary and are missed in standard. * Its arithmetic has a reasonable cost order even for the case when the proof parts are inspected. The Fraction part of the library improves the standard library in that fractions are considered not only over integer numbers, but over an arbitrary GCDRing. So that the domain Rational is expressed as (Fraction Integer). And many other kinds of fractions become possible to operate with, for example, fractions of multivariate polynomials. In particular, the domain BRational = Fraction BInteger provides arithmetic for rational numbers which parts are represented in binary system, which arithmetic has a low cost order. Relation to Standard library lib-1.0 ------------------------------------ * The Bin part is completely replaced. * The classical generic algebra structure hierarhy (Setoid, Magma, ..., CommutativeRing) is taken of standard library. And for the Fraction part, there are added the following items. a) DecIntegralRing (a commutative ring without zero divisors and with a decidable division), GCDRing -- a DecIntegralRing which provides the gcd operation. b) A general definition of primality and greatest common divisor. Concerning the Bin part: ------------------------ the binary representation for natural numbers is by the constructors: 0#, 2suc, suc2* (zero, any even, any odd). It follows the respresentation that was shown in 2016 in the library by Martin Escardo of 2016: http://www.cs.bham.ac.uk/~mhe/agda-new/BinaryNaturals.html The Bin part is mainly Binary-4 (https://github.com/mechvel/Binary-4), with a certain improvement for the _<_ relation. Installation: agda -c $agdaLibOpt TypeCheckAll.agda agda -c $agdaLibOpt Bin/GCDTest.agda agda -c $agdaLibOpt Fraction/BRationalTest.agda Performance tests: Bin/DivModTest.agda, Bin/GCDTest.agda, Bin/LogarithmTest.agda, Fractions/BRationalTest.agda, Fractions/RationalTest.agda. ("readme"-s are included). Memory requirement ------------------ Type checking BFLib needs at list 900 Mb RAM. This also suffices to compile it via the MAlonzo tool. To work with BFLib it is desirable to have at least 4 Gb computer. Comments and improvements are welcome. --------------------- Sergei D. Meshveliani From monnier at iro.umontreal.ca Sat May 4 00:45:08 2019 From: monnier at iro.umontreal.ca (Stefan Monnier) Date: Fri, 03 May 2019 18:45:08 -0400 Subject: [Agda] Pattern matching on irrelevant types with only one constructor? References: Message-ID: > Well, if we don't have strong normalization we also lose decidability of > typechecking, which is kind of an important design goal of Agda IMO. Why would it be important? I understand that we want elaboration and type-checking to finish promptly in practice, as much as possible, but decidability of type-checking doesn't give us that. Stefan From frederic.blanqui at inria.fr Mon May 6 08:23:41 2019 From: frederic.blanqui at inria.fr (=?UTF-8?B?RnLDqWTDqXJpYyBCbGFucXVp?=) Date: Mon, 6 May 2019 08:23:41 +0200 Subject: [Agda] Call for registration: 11th International School on Rewriting (ISR'19), 1-6 July 2019, MINES ParisTech, France In-Reply-To: <0e053da6-842b-eeff-e569-aecb478ab88d@inria.fr> References: <0e053da6-842b-eeff-e569-aecb478ab88d@inria.fr> Message-ID: <9a6494f6-944a-156d-dac9-b618a70c4702@inria.fr> The early registration deadline is May 17! Special price for master students. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ???? 11th International School on Rewriting (ISR'19) ???????? 1-6 July 2019, MINES ParisTech, France ?????????? https://isr2019.mines-paristech.fr/ ???????? Deadline for early registration: May 17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Rewriting is a simple yet powerful model of computation with numerous applications in computer science and many other fields: logic, mathematics, programming languages, model checking, quantum computing, biology, music... ISR'19 is hosted in the center of Paris and proposes to master students, PhD students and researchers, two parallel tracks: - basic track: introduction to first-order term rewriting and ?-calculus ? with lectures by Aart Middeldorp, Sarah Winkler and Femke van Raamsdonk - advanced track: lectures on rewriting theory and applications ??? . Automated complexity analysis of term rewrite systems, Martin Avanzini ??? . Reachability in logically constrained term rewriting systems, ?tefan Ciob?c? ??? . Deduction modulo rewriting, Gilles Dowek ??? . Introduction to graph rewriting, Rachid Echahed ??? . Rewriting and music, Florent Jacquemard ??? . Picturing quantum processes, rewriting quantum pictures, Aleks Kissinger ??? . Stochastic graph rewriting and (executable) knowledge representation for molecular biology, Jean Krivine ??? . Higher-order term rewriting, Cynthia Kop ??? . Homotopy and homology of rewriting, Yves Lafont ??? . Rewriting in theorem proving, Christopher Lynch ??? . Formal specification and analysis of real-time systems in Real-Time Maude, Peter Csaba ?lveczky ??? . Infinitary rewriting and streams, Hans Zantema The organizers are Fr?d?ric Blanqui (INRIA, LSV and ENS Paris-Saclay) and Olivier Hermant (MINES ParisTech). ISR'19 is promoted by the IFIP WG1.6 and supported by the DIM RFSI, the R?gion Ile-de-France, INRIA, the GDR GPL and the LSV. From chantal.keller at wanadoo.fr Mon May 6 13:35:16 2019 From: chantal.keller at wanadoo.fr (Chantal Keller) Date: Mon, 6 May 2019 13:35:16 +0200 Subject: [Agda] PxTP 2019 - Last Call for Papers Message-ID: [Please accept our apologies for duplicates] ============================================== Last Call for Papers, PxTP 2019 The Sixth International Workshop on Proof eXchange for Theorem Proving (PxTP) http://pxtp.gforge.inria.fr/2019/ 25-26 August 2019, Natal, Brazil associated with the CADE-27 conference ## Background The PxTP workshop brings together researchers working on various aspects of communication, integration, and cooperation between reasoning systems and formalisms. The progress in computer-aided reasoning, both automatic and interactive, during the past decades, has made it possible to build deduction tools that are increasingly more applicable to a wider range of problems and are able to tackle larger problems progressively faster. In recent years, cooperation of such tools in larger verification environments has demonstrated the potential to reduce the amount of manual intervention. Examples include the Sledgehammer tool providing an interface between Isabelle and (untrusted) automated provers, and collaboration of the HOL Light and Isabelle systems in the formal proof of the Kepler conjecture. Cooperation between reasoning systems relies on availability of theoretical formalisms and practical tools for exchanging problems, proofs, and models. The PxTP workshop strives to encourage such cooperation by inviting contributions on suitable integration, translation, and communication methods, standards, protocols, and programming interfaces. The workshop welcomes developers of automated and interactive theorem proving tools, developers of combined systems, developers and users of translation tools and interfaces, and producers of standards and protocols. We are interested both in success stories and descriptions of current bottlenecks and proposals for improvement. ## Topics Topics of interest for this workshop include all aspects of cooperation between reasoning tools, whether automatic or interactive. More specifically, some suggested topics are: * applications that integrate reasoning tools (ideally with certification of the result); * interoperability of reasoning systems; * translations between logics, proof systems, models; * distribution of proof obligations among heterogeneous reasoning tools; * algorithms and tools for checking and importing (replaying, reconstructing) proofs; * proposed formats for expressing problems and solutions for different classes of logic solvers (SAT, SMT, QBF, first-order logic, higher-order logic, typed logic, rewriting, etc.); * meta-languages, logical frameworks, communication methods, standards, protocols, and APIs related to problems, proofs, and models; * comparison, refactoring, transformation, migration, compression and optimization of proofs; * data structures and algorithms for improved proof production in solvers (e.g., efficient proof representations); * (universal) libraries, corpora and benchmarks of proofs and theories; * alignment of diverse logics, concepts and theories across systems and libraries; * engineering aspects of proofs (e.g., granularity, flexiformality, persistence over time); * proof certificates; * proof checking; * mining of (mathematical) information from proofs (e.g., quantifier instantiations, unsat cores, interpolants, ...); * reverse engineering and understanding of formal proofs; * universality of proofs (i.e. interoperability of proofs between different proof calculi); * origins and kinds of proofs (e.g., (in)formal, automatically generated, interactive, ...) * Hilbert's 24th Problem (i.e. what makes a proof better than another?); * social aspects (e.g., community-wide initiatives related to proofs, cooperation between communities, the future of (formal) proofs); * applications relying on importing proofs from automatic theorem provers, such as certified static analysis, proof-carrying code, or certified compilation; * application-oriented proof theory; * practical experiences, case studies, feasibility studies. ## Submissions Researchers interested in participating are invited to submit either an extended abstract (up to 8 pages) or a regular paper (up to 15 pages). Submissions will be refereed by the program committee, which will select a balanced program of high-quality contributions. Short submissions that could stimulate fruitful discussion at the workshop are particularly welcome. We expect that one author of every accepted paper will present their work at the workshop. Submitted papers should describe previously unpublished work, and must be prepared using the LaTeX EPTCS class (http://style.eptcs.org/). Papers will be submitted via EasyChair, at the PxTP'2019 workshop page (https://easychair.org/conferences/?conf=pxtp2019). Accepted regular papers will appear in an EPTCS volume. # Important Dates * Abstract submission: May 12, 2019 * Paper submission: May 19, 2019 * Notification: June 21, 2019 * Camera ready versions due: July 14, 2019 * Workshop: 25-26 August 2019 ## Invited Speakers TBA ## Program Committee * Haniel Barbosa (University of Iowa), co-chair * Giselle Reis (Carnegie Mellon University), co-chair * Roberto Blanco, Inria, France * Fr?d?ric Blanqui, Inria, France * Simon Cruanes, Aesthetic Integration, USA * Catherine Dubois, ENSIIE, France * Amy Felty, University of Ottawa, Canada * Mathias Fleury, Max-Planck-Institut f?r Informatik, Germany * St?phane Graham-Lengrand, SRI, USA * Cezary Kaliszyk, University of Innsbruck, Austria * Chantal Keller, LRI, Universit? Paris-Sud, France * Laura Kov?cs, TU Wien, Austria * Olivier Laurent, CNRS, ENS Lyon, France * Stefan Mitsch, Carnegie Mellon University, USA * Carlos Olarte, UFRN, Brazil * Bruno Woltzenlogel Paleo, IOHK, Australia * Florian Rabe, LRI, Universit? Paris-Sud, France * Martin Riener, University of Manchester, UK * Geoff Sutcliffe, University of Miami, USA * Josef Urban, Czech Institute of Informatics, Robotics and Cybernetics (CIIRC), Czech Republic * Yoni Zohar, Stanford University, USA ## Previous PxTP Editions * PxTP 2017 (https://pxtp.github.io/2017/), affiliated to Tableaux 2017, FroCoS 2017 and ITP 2017 * PxTP 2015 (http://pxtp15.lri.fr/), affiliated to CADE-25 * PxTP 2013 (http://www.cs.ru.nl/pxtp13/), affiliated to CADE-24 * PxTP 2012 (http://pxtp2012.inria.fr/), affiliated to IJCAR 2012 * PxTP 2011 (http://pxtp2011.loria.fr/), affiliated to CADE-23 From A.Popescu at mdx.ac.uk Tue May 7 01:18:26 2019 From: A.Popescu at mdx.ac.uk (Andrei Popescu) Date: Mon, 6 May 2019 23:18:26 +0000 Subject: [Agda] FroCoS and TABLEAUX 2019 (London): SECOND (AND FINAL) DEADLINE EXTENSION Message-ID: Dear potential authors and registered authors who wish to polish your submissions, We have decided to issue a second (and final) deadline extension of four days for the 2019 joint editions of the FroCoS and TABLEAUX conferences. The new deadlines are: 10 May 2019 (abstract), 12 May 2019 (paper) We hope to see many of you this September in London! Best wishes, Serenella Cerrito, Andreas Herzig, Andrei Popescu and Franco Raimondi (PC chairs and local organizers) Conference websites: https://frocos2019.org, https://www.tableaux2019.org Contact: chair at frocos2019.org, chair at tableaux2019.org -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Tue May 7 16:01:35 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Tue, 7 May 2019 16:01:35 +0200 Subject: [Agda] Performance tips and profiling memory usage In-Reply-To: References: <8420ceaf-6b8e-037c-ff29-581a6f977096@cse.gu.se> Message-ID: <0dde3e6c-2b36-e0fc-8293-1fdd0dab4e75@cse.gu.se> On 02/05/2019 12.07, Matthew Daggitt wrote: > I guess it would still be great if the wiki page on performance could > be migrated to the new documentation and updated by someone in the > know. Yes, here's the page on the wiki: https://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.PerformanceTips -- /NAD From icfp.publicity at googlemail.com Tue May 7 23:03:07 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Tue, 07 May 2019 17:03:07 -0400 Subject: [Agda] PLMW at ICFP: Call for Scholarship Applications (due 17 May) Message-ID: <5cd1f28bbc9ee_fb52aae625c05b8566e2@homer.mail> ACM SIGPLAN Programming Languages Mentoring Workshop Co-located with ICFP'19 PLMW web page: https://icfp19.sigplan.org/home/PLMW-ICFP-2019 The purpose of the programming languages mentoring workshop (PLMW) is to encourage senior undergraduate and early career (first or second year) to pursue careers in programming language research. We are specifically interested in attracting groups who have traditionally not had the opportunity to participate in research in functional programming. This workshop will be a combination of learning about the work being done in several areas of programming language research and mentoring with respect to helping students prepare for graduate school and the rest of their career. We will bring together leaders in programming language research from academia and industry to give talks on the kind of research typically performed after obtaining a Ph.D. The workshop will engage students, specifically interested in programming language research, in a process of imagining how they might contribute to the world. We especially encourage women and underrepresented minority students to attend PLMW. This workshop is part of the activities surrounding ICFP, the International Conference on Functional Programming, and takes place the day before the main conference. One goal of the workshop is to make ICFP conference more accessible to newcomers. We hope that participants will stay through the entire conference. ## Travel Scholarship Applications (Due 17 May) Please fill out this form by 17 May to apply for travel funding. https://forms.gle/QEvBateG7PRywB336 See the PLMW web page for additional details. The workshop registration is open to all. Students with alternative sources of funding are welcome. From P.Achten at cs.ru.nl Wed May 8 09:23:39 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Wed, 8 May 2019 09:23:39 +0200 Subject: [Agda] [TFP'19] final call for papers (deadline extension): Trends in Functional Programming 2019, 12-14 June 2019, Vancouver, BC, CA Message-ID: <72cb055f-4383-20c7-402c-b32f0176fe32@cs.ru.nl> -------------------------------- F I N A L C A L L F O R P A P E R S -------------------------------- ====== TFP 2019 ====== 20th Symposium on Trends in Functional Programming 12-14 June, 2019 Vancouver, BC, CA https://www.tfp2019.org/index.html == Important Dates == Sumbission Deadline for Draft Papers Thursday, May 16, 2019 ** extended deadline ** Notification for Draft Papers Tuesday, May 21, 2019 ** extended deadline ** TFPIE Tuesday, June 11, 2019 Symposium Wednesday, June 12, 2019 ? Friday, June 14, 2019 Notification of Student Paper Feedback Friday June 21, 2019 Submission Deadline for revised Draft Papers (post-symposium formal review) Thursday, August 1, 2019 Notification for post-symposium submissions Thursday, October 24, 2019 Camera Ready Deadline (both pre- and post-symposium) Friday, November 29, 2019 The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions (see below at scope). Please be aware that TFP uses two distinct rounds of submissions (see below at submission details). TFP 2019 will be the main event of a pair of functional programming events. TFP 2019 will be accompanied by the International Workshop on Trends in Functional Programming in Education (TFPIE), which will take place on June 11. == Scope == The symposium recognizes that new trends may arise through various routes. As part of the Symposium's focus on trends we therefore identify the following five article categories. High-quality articles are solicited in any of these categories: Research Articles: Leading-edge, previously unpublished research work Position Articles: On what new trends should or should not be Project Articles: Descriptions of recently started new projects Evaluation Articles: What lessons can be drawn from a finished project Overview Articles: Summarizing work with respect to a trendy subject Articles must be original and not simultaneously submitted for publication to any other forum. They may consider any aspect of functional programming: theoretical, implementation-oriented, or experience-oriented. Applications of functional programming techniques to other languages are also within the scope of the symposium. Topics suitable for the symposium include, but are not limited to: Functional programming and multicore/manycore computing Functional programming in the cloud High performance functional computing Extra-functional (behavioural) properties of functional programs Dependently typed functional programming Validation and verification of functional programs Debugging and profiling for functional languages Functional programming in different application areas: security, mobility, telecommunications applications, embedded systems, global computing, grids, etc. Interoperability with imperative programming languages Novel memory management techniques Program analysis and transformation techniques Empirical performance studies Abstract/virtual machines and compilers for functional languages (Embedded) domain specific languages New implementation strategies Any new emerging trend in the functional programming area If you are in doubt on whether your article is within the scope of TFP, please contact the TFP 2019 program chairs, William J. Bowman and Ron Garcia. == Best Paper Awards == To reward excellent contributions, TFP awards a prize for the best paper accepted for the formal proceedings. TFP traditionally pays special attention to research students, acknowledging that students are almost by definition part of new subject trends. A student paper is one for which the authors state that the paper is mainly the work of students, the students are listed as first authors, and a student would present the paper. A prize for the best student paper is awarded each year. In both cases, it is the PC of TFP that awards the prize. In case the best paper happens to be a student paper, that paper will then receive both prizes. == Instructions to Author == Papers must be submitted at: https://easychair.org/conferences/?conf=tfp2019 Authors of papers have the choice of having their contributions formally reviewed either before or after the Symposium. == Pre-symposium formal review == Papers to be formally reviewed before the symposium should be submitted before an early deadline and receive their reviews and notification of acceptance for both presentation and publication before the symposium. A paper that has been rejected in this process may still be accepted for presentation at the symposium, but will not be considered for the post-symposium formal review. == Post-symposium formal review == Papers submitted for post-symposium review (draft papers) will receive minimal reviews and notification of acceptance for presentation at the symposium. Authors of draft papers will be invited to submit revised papers based on the feedback received at the symposium. A post-symposium refereeing process will then select a subset of these articles for formal publication. == Paper categories == There are two types of submission, each of which can be submitted either for pre-symposium or post-symposium review: Extended abstracts. Extended abstracts are 4 to 10 pages in length. Full papers. Full papers are up to 20 pages in length. Each submission also belongs to a category: research position project evaluation overview paper Each submission should clearly indicate to which category it belongs. Additionally, a draft paper submission?of either type (extended abstract or full paper) and any category?can be considered a student paper. A student paper is one for which primary authors are research students and the majority of the work described was carried out by the students. The submission should indicate that it is a student paper. Student papers will receive additional feedback from the PC shortly after the symposium has taken place and before the post-symposium submission deadline. Feedback is only provided for accepted student papers, i.e., papers submitted for presentation and post-symposium formal review that are accepted for presentation. If a student paper is rejected for presentation, then it receives no further feedback and cannot be submitted for post-symposium review. == Format == Papers must be written in English, and written using the LNCS style. For more information about formatting please consult the Springer LNCS web site (http://www.springer.com/lncs). == Program Committee == Program Co-chairs William J. Bowman University of British Columbia Ronald Garcia University of British Columbia Matteo Cimini University of Massachusetts Lowell Ryan Culpepper Czech Technical Institute Joshua Dunfield Queen's University Sam Lindley University of Edinburgh Assia Mahboubi INRIA Nantes Christine Rizkallah University of New South Wales Satnam Singh Google AI Marco T. Moraz?n Seton Hall University John Hughes Chalmers University and Quviq Nicolas Wu University of Bristol Tom Schrijvers KU Leuven Scott Smith Johns Hopkins University Stephanie Balzer Carnegie Mellon University Vikt?ria Zs?k E?tv?s Lor?nd University -------------- next part -------------- An HTML attachment was scrubbed... URL: From P.Achten at cs.ru.nl Wed May 8 09:54:39 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Wed, 8 May 2019 09:54:39 +0200 Subject: [Agda] [TFPIE'19] Final call for papers: Trends in Functional Programming in Education 2019, 11 June 2019, Vancouver, BC, CA Message-ID: <80dda023-bace-87d5-db1f-4dc43e5ae605@cs.ru.nl> TFPIE 2019 Call for papers http://www.staff.science.uu.nl/~hage0101/tfpie2019/index.html (June 11th, University of British Columbia, Vancouver Canada, co-located with TFP 2019) TFPIE 2019 welcomes submissions describing techniques used in the classroom, tools used in and/or developed for the classroom and any creative use of functional programming (FP) to aid education in or outside Computer Science. Topics of interest include, but are not limited to: FP and beginning CS students FP and Computational Thinking FP and Artificial Intelligence FP in Robotics FP and Music Advanced FP for undergraduates FP in graduate education Engaging students in research using FP FP in Programming Languages FP in the high school curriculum FP as a stepping stone to other CS topics FP and Philosophy The pedagogy of teaching FP FP and e-learning: MOOCs, automated assessment etc. Best Lectures - more details below In addition to papers, we are requesting best lecture presentations. What's your best lecture topic in an FP related course? Do you have a fun way to present FP concepts to novices or perhaps an especially interesting presentation of a difficult topic? In either case, please consider sharing it. Best lecture topics will be selected for presentation based on a short abstract describing the lecture and its interest to TFPIE attendees. The length of the presentation should be comparable to that of a paper. On top of the lecture itself, the presentation can also provide commentary on the lecture. Submissions Potential presenters are invited to submit an extended abstract (4-6 pages) or a draft paper (up to 16 pages) in EPTCS style. The authors of accepted presentations will have their preprints and their slides made available on the workshop's website. Papers and abstracts can be submitted via easychair at the following link: https://easychair.org/conferences/?conf=tfpie2019 After the workshop, presenters will be invited to submit (a revised version of) their article for review. The PC will select the best articles that will be published in the Electronic Proceedings in Theoretical Computer Science (EPTCS). Articles rejected for presentation and extended abstracts will not be formally reviewed by the PC. Dates Submission deadline: May 14th 2019, Anywhere on Earth. Notification: May 20th Workshop: June 11th Submission for formal review: August 18th 2019, Anywhere on Earth Notification of full article: October 6th Camera ready: November 1st Program Committee Alex Gerdes - University of Gothenburg / Chalmers Jurriaan Hage (Chair) - Utrecht University Pieter Koopman - Radboud University, the Netherlands Elena Machkasova - University of Minnesota, Morris, USA Heather Miller - Carnegie Mellon University and EPFL Lausanne Prabhakar Ragde - University of Waterloo, Waterloo, Ontario, Canada Simon Thompson - University of Kent, UK Sharon Tuttle - Humboldt State University, Arcata, USA Note: information on TFP is available at https://www.tfp2019.org/index.html -------------- next part -------------- An HTML attachment was scrubbed... URL: From Graham.Hutton at nottingham.ac.uk Wed May 8 10:01:54 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Wed, 8 May 2019 08:01:54 +0000 Subject: [Agda] Journal of Functional Programming - Call for PhD Abstracts Message-ID: Dear all, If you or one of your students recently completed a PhD in the area of functional programming, please submit the dissertation abstract for publication in JFP: simple process, no refereeing, open access, deadline 31st May 2019. Please share! Best wishes, Graham Hutton ============================================================ CALL FOR PHD ABSTRACTS Journal of Functional Programming Deadline: 31st May 2019 http://tinyurl.com/jfp-phd-abstracts ============================================================ PREAMBLE: Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year. The abstracts are made freely available on the JFP website, i.e. not behind any paywall. They do not require any transfer of copyright, merely a license from the author. A dissertation is eligible for inclusion if parts of it have or could have appeared in JFP, that is, if it is in the general area of functional programming. The abstracts are not reviewed. Please submit dissertation abstracts according to the instructions below. We welcome submissions from both the PhD student and PhD advisor/supervisor although we encourage them to coordinate. ============================================================ SUBMISSION: Please submit the following information to Graham Hutton by 31st May 2019: o Dissertation title: (including any subtitle) o Student: (full name) o Awarding institution: (full name and country) o Date of PhD award: (month and year; depending on the institution, this may be the date of the viva, corrections being approved, graduation ceremony, or otherwise) o Advisor/supervisor: (full names) o Dissertation URL: (please provide a permanently accessible link to the dissertation if you have one, such as to an institutional repository or other public archive; links to personal web pages should be considered a last resort) o Dissertation abstract: (plain text, maximum 350 words; you may use \emph{...} for emphasis, but we prefer no other markup or formatting; if your original abstract exceeds the word limit, please submit an abridged version within the limit) Please do not submit a copy of the dissertation itself, as this is not required. JFP reserves the right to decline to publish abstracts that are not deemed appropriate. ============================================================ PHD ABSTRACT EDITOR: Graham Hutton School of Computer Science University of Nottingham Nottingham NG8 1BB United Kingdom ============================================================ This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From aggelos.biboudis at epfl.ch Fri May 10 13:08:35 2019 From: aggelos.biboudis at epfl.ch (Aggelos Biboudis) Date: Fri, 10 May 2019 13:08:35 +0200 Subject: [Agda] SPLASH 2019 Combined Call for Workshop Submissions Message-ID: SPLASH 2019 Combined Call for Workshop Submissions ================================================== Following its long-standing tradition, SPLASH will host a variety of workshops, allowing their participants to meet and discuss research questions with peers, to mature new and exciting ideas, and to build up communities and start new collaborations. SPLASH workshops complement the main tracks of the conference and provide meetings in a smaller and more specialized setting. The following workshops will be co-located with SPLASH 2019. * AGERE (Actors, Agents, and Decentralized Control) * AI-SEPS (AI-Inspired and Empirical Methods for Software Engineering on Parallel Computing Systems) * DSM (Domain-Specific Modeling) * IC (Incremental Computing) * LIVE (Live Programming) * META (Metaprogramming) * NJR (Normalized Java Resource) * REBLS (Reactive and Event-based Languages & Systems) * STOKED (Spatio-Temporal platforms for Observations and Knowledge of Earth Data) * VMIL (Virtual Machines and Intermediate Languages) *The submission deadline for all workshops is Fri 2 Aug 2019 (AoE).* AGERE (Actors, Agents, and Decentralized Control) ------------------------------------------------- Call: https://2019.splashcon.org/home/agere-2019 The AGERE! workshop focuses on programming systems, languages, and applications based on actors, active/concurrent objects, agents, and -- more generally -- on high-level programming paradigms which promote decentralized control in solving problems and developing software. AGERE covers both the theory and the practice of design and programming, bringing together researchers working on models, languages and technologies, and practitioners developing real-world systems and applications. AI-SEPS (AI-Inspired and Empirical Methods for SE on Parallel Computing Systems) -------------------------------------------------------------------------------- Call: https://2019.splashcon.org/home/seps-2019 The AI-SEPS workshop provides a stable forum for researchers and practitioners addressing the challenges and issues of the software development life cycle on modern parallel platforms and HPC systems. Emerging artificial intelligence technologies are promising approaches to tackle these issues, as well as approaches that use traditional empirical and experimental methods. The workshop title reflects a change from the previous editions, with emphasis placed on the trend of AI-inspired software engineering techniques for performance. We aim to advance the state of the art in all aspects of techniques on software engineering and parallel computing systems such as requirements engineering and software specification; design and implementation; program analysis; performance analysis, profiling and tuning; testing and debugging. DSM (Domain-Specific Modeling) ------------------------------ Call: https://2019.splashcon.org/home/dsm-2019 Domain-Specific Modeling (DSM) languages provide a viable and time-tested solution for continuing to raise the level of abstraction, and thus productivity, beyond coding, making systems and software development faster and easier. In DSM, the models are constructed using concepts that represent things in the application domain, not concepts of a given programming language. The modeling language follows the domain abstractions and semantics, allowing developers to perceive themselves as working directly with domain concepts. Some possible topics for submission to the workshop include: experience reports, creation of metamodel-based languages, novel approaches for code generation from domain-specific models, language evolution, metamodeling frameworks and languages, and tool support for DSMs. IC (Incremental Computing) ----------------------------- Call: https://2019.splashcon.org/home/ic-2019 The second Workshop on Incremental Computing (IC) will provide a space where PL enthusiasts and researchers can discuss incremental computing problems and solutions. A good talk at IC probably consists of one or more of the following: explain an existing language or framework for incremental computing; outline an incremental computing domain in detail, highlighting challenges; outline a new incremental computing problem, or problem domain; or, propose a new language or framework for incremental computing. This list is not exhaustive, but merely suggestive. LIVE (Live Programming) ----------------------- Call: https://2019.splashcon.org/home/live-2019 The LIVE workshop invites submissions of ideas for improving programming via liveness. Live programming gives the programmer immediate feedback on the behavior of a program as it is edited, replacing the edit-compile-debug cycle with a fluid programming experience. The most commonly used live programming environment is the spreadsheet, but there are many others. The study of live programming is now a [re-]established area of research. This year we would like to reflect on what has been achieved, what has been learnt, and what remains to be done, growing up from a nascent community into a discipline that can build on previous work. We especially welcome reflection upon prior work, including proposals to integrate, generalize, or theoretically frame them. We will do this whilst maintaining the shared spirit of LIVE, encouraging a focus on the human experience of programming. The LIVE workshop is a forum for early-stage work to receive constructive criticism. We accept short papers, web essays with embedded videos, and demo videos. META (Metaprogramming) ---------------------- Call: https://2019.splashcon.org/home/meta-2019 The changing hardware and software landscape along with the increased heterogeneity of systems make metaprogramming once more an important research topic to handle the associated complexity. This workshop aims to bring together researchers working on metaprogramming and reflection, as well as users building applications, language extensions, or software tools using them. The challenges which metaprogramming faces are manifold. They start with formal reasoning about reflective programs, continue with performance and tooling, and reach into the empirical field to understand how metaprogramming is used and how it affects software maintainability. While industry accepted metaprogramming on a wide scale with Ruby, Scala, JavaScript and others, academia still needs to bring it to the same level of convenience, tooling, and understanding as for direct programming styles. Contributions to the workshop are welcome on a wide range of topics related to the design, implementation, and application of metaprogramming techniques, as well as formal methods and empirical studies for such systems and languages. NJR (Normalized Java Resource) ------------------------------ Call: https://2019.splashcon.org/home/njr-2019 Software researchers increasingly take advantage of large software repositories when they design new tools. How do we make such repositories maximally useful for research? In particular, how do we make them more searchable, make interaction scriptable, and ensure that we can run both static and dynamic analyses? Additionally, how do we make the results from tools reproducible, how do we label programs with ground truth, and how do we measure whether a repository is representative of real-world applications? NJR 2019 will be the third workshop in a series that addresses these questions. The goal is for researchers in academia and industry to share new ideas, demonstrate recent tools, and discuss directions for research and development. REBLS (Reactive and Event-based Languages and Systems) ------------------------------------------------------ Call: https://2019.splashcon.org/home/rebls-2019 Reactive programming and event-based programming are two closely related programming styles that are becoming ever more important with the advent of advanced HPC technology and the ever increasing requirement for our applications to run on the web or on collaborating mobile devices. A number of publications on middleware and language design -- so-called reactive and event-based languages and systems (REBLS) -- have already seen the light, but the field still raises several questions. For example, the interaction with mainstream language concepts is poorly understood, implementation technology is in its infancy and modularity mechanisms are almost totally lacking. Moreover, large applications are still to be developed and patterns and tools for developing reactive applications is an area that is vastly unexplored. This workshop will gather researchers in reactive and event-based languages and systems. The goal of the workshop is to exchange new technical research results and to define better the field by coming up with taxonomies and overviews of the existing work. STOKED (Spatio-Temporal platforms for Observations and Knowledge of Earth Data) ------------------------------------------------------------------------------- Call: https://2019.splashcon.org/home/stoked-2019 Global coverage and temporal resolutions of earth observation imagery data is increasing at an unprecedented rate, generating trillions of new pixels of data daily. The challenge with this "big data" is finding practical ways to extract knowledge and deliver it to end users at scale, both due to the complex nature and the sheer volume of information. Detailed, standardized geographic information is required to enable a new era of spatial temporal analytics?enabling insights to understand, monitor, and manage the earth?s resources in a sustainable manner. This can be accomplished through massive aggregation of data from remote sensors coupled with novel approaches to preparing, analyzing, and interacting with data. Modern spatio-temporal platforms will soon be using 3D visual interactive maps with close to real-time deep learning algorithms. In addition to system infrastructure and UI/UX challenges, we also need to address the normalization problems of data, particularly with data generated from multiple sensors. Use cases in climate change and emergency response in "extreme events" would see immediate benefit from this kind of platform. STOKED will provide an opportunity for researchers and stakeholders from this broad spectrum of applications and domains to start to design future platforms from an interdisciplinary perspective. VMIL (Virtual Machines and Intermediate Languages) -------------------------------------------------- Call: https://2019.splashcon.org/home/vmil-2019 The concept of Virtual Machines is pervasive in the design and implementation of programming systems. Virtual Machines and the languages they implement are crucial in the specification, implementation and/or user-facing deployment of most programming technologies. The VMIL workshop is a forum for researchers and cutting-edge practitioners in language virtual machines, the intermediate languages they use, and related issues. From W.S.Swierstra at uu.nl Mon May 13 11:22:49 2019 From: W.S.Swierstra at uu.nl (Swierstra, W.S. (Wouter)) Date: Mon, 13 May 2019 09:22:49 +0000 Subject: [Agda] Utrecht Summer School on Advanced Functional Programming Message-ID: <20190513092247.GD23570@x1> # Call for Participation SUMMER SCHOOL ON ADVANCED FUNCTIONAL PROGRAMMING Utrecht, the Netherlands, 27-31 August 2018 http://www.afp.school ## ABOUT The Advanced Functional Programming summer school has been running for more than ten years. We aim to educate aspiring Haskell programmers beyond the basic material covered by many textbooks. The lectures will cover several more advanced topics regarding the theory and practice of Haskell programming, including topics such as: * lambda calculus; * monads and monad transformers; * lazy evaluation; * generalized algebraic data types; * type families and type-level programming; * concurrency and parallelism. The summer school consists of a mix of lectures, labs, and a busy social program. ## LECTURERS Utrecht staff: * Gabriele Keller * Trevor McDonell * Alejandro Serrano Mena * Wouter Swierstra ## PREREQUISITES We expect students to have a basic familiarity with Haskell already. You should be able to write recursive functions over algebraic data types, such as lists and trees. There is a great deal of material readily available that covers this material. If you've already started learning Haskell and are looking to take your functional programming skills to the next level, this is the course for you. ## DATES Registration deadline: 1 August, 2019 School: 26-30 August ## COSTS 1700 euro - Housing and registration 1500 euro - Registration only We offer a 1000 discount for students and staff members affiliated with a university. ## SCHOLARSHIPS If you're struggling to finance your trip to Utrecht, please let us know. We have a limited number of scholarships or discounts available for students that would not be able to attend otherwise, especially for women and under-represented minorities. ## FURTHER INFORMATION Further information, including instructions on how to register, is available on our website: http://www.afp.school From yallop at gmail.com Wed May 15 15:14:53 2019 From: yallop at gmail.com (Jeremy Yallop) Date: Wed, 15 May 2019 14:14:53 +0100 Subject: [Agda] Metaprogramming Summer School (August 2019): call for applications Message-ID: ==================================================================== Second International Summer School on Metaprogramming Schloss Dagstuhl, Leibniz Center for Informatics, Germany 11th-16th August 2019 (the week before ICFP'19) https://www.cl.cam.ac.uk/events/metaprog/2019/ ==================================================================== Metaprogramming is an approach to constructing programs by treating program fragments (such as expressions or types) as values that the program can manipulate. Metaprogramming comes in various forms --- for example, * in dependently-typed programming terms appear within types, supporting the construction of precise specifications of functions and data. * in multi-stage programming expressions are program values, making it possible to write safe program generation programs that can significantly improve performance. * in languages with macros programs execute partly during compilation and partly at run-time, eliminating the sharp distinction between built-in and user-defined constructs. * embedded domain-specific languages reuse host language features such as syntax and type-checking for convenient definition of little languages suited to a particular endeavour. Metaprogramming has many applications, including genericity, proof automation, language extensibility and user-defined optimization. The goal of the summer school is to explore the state-of-the art in metaprogramming and its applications, covering both theory and practice. -------------------------------------------------------------------- Lecturers and courses Oleg Kiselyov (Tohoku University) From the tagless-final cookbook: simple hardware description language and optimization-by-evaluation Matthew Flatt (University of Utah) Building Languages with Racket Conor McBride (University of Strathclyde) TBD Jonathan Protzenko (Microsoft Research Redmond) Meta-F*: efficient meta-programming of the F* compiler at every stage -------------------------------------------------------------------- Prerequisites The school is aimed at graduate students in programming languages and related areas, but is open to researchers, practitioners and strong masters students with the support of a supervisor. Some experience of typed functional programming in Haskell, OCaml, Scala, or a similar language will be assumed. -------------------------------------------------------------------- Costs Thanks to the Schloss Dagstuhl subsidies, accommodation costs are as follows, and the dates are immediately before ICFP'19 (also in Germany): Single-occupancy accommodation: ?420 Double-occupancy accommodation: ?330 Accommodation costs include full board (in a single- or double-occupancy room, including meals during stay) from Sunday 11 August (evening) to Friday 16 August (afternoon). -------------------------------------------------------------------- Application procedure You will need to complete the online registration form at: https://www.cl.cam.ac.uk/events/metaprog/2019/application.html and ensure your referees send your references to: metaprog-2019 at cl.cam.ac.uk by the application deadline. TIMETABLE * 30 June: Application and reference letters deadline. * 10 July: Notification of acceptance. * 11 August: Summer school. -------------------------------------------------------------------- Further information For any questions relating to the school, please contact the organisers (Jeremy Yallop, Ohad Kammar, Yukiyoshi Kameyama) at metaprog-2019 at cl.cam.ac.uk From xu at math.lmu.de Wed May 15 15:45:17 2019 From: xu at math.lmu.de (Chuangjie Xu) Date: Wed, 15 May 2019 15:45:17 +0200 Subject: [Agda] 4th autumn school "Proof and Computation" Message-ID: <20190515154517.15954s9kgfq51431@webmail.mathematik.uni-muenchen.de> [Apologies for for multiple postings.] Autumn school "Proof and Computation" Herrsching, Germany, 20th to 26th September 2019 http://www.mathematik.uni-muenchen.de/~schwicht/pc19.php The fourth international autumn school "Proof and Computation" will be held from 20th to 26th September 2019 in Herrsching near Munich. Its aim is to bring together young researchers in the field of Foundations of Mathematics, Computer Science and Philosophy. SCOPE -------------------- - Predicative Foundations - Constructive Mathematics and Type Theory - Computation in Higher Types - Extraction of Programs from Proofs COURSES -------------------- - Ingo Blechschmidt on Generalized Spaces for Constructive Algebra - Stefania Centrone on Proof Theory - Thierry Coquand on Applications of Type Theory - Anton Freund on Dilators - Tatsuji Kawai on Concepts of Continuity - Dominique Larchey on Extraction of Programs in Coq WORKING GROUPS -------------------- There will be an opportunity to form ad-hoc groups working on specific projects, but also to discuss in more general terms the vision of constructing correct programs from proofs. APPLICATIONS -------------------- Graduate or PhD students and young postdoctoral researches are invited to apply. Applications (e.g. a self-introduction including research interests and motivation) must be accompanied by a letter of recommendation, preferably from the thesis adviser, and should be sent to Chuangjie Xu (xu at math.lmu.de). Deadline for applications: **31st May 2019**. Applicants will be notified by 28th June 2019. FINANCIAL SUPPORT -------------------- Successful applicants will be offered **full-board accommodation** for the days of the autumn school. There are NO funds, however, to reimburse travel or further expenses, which successful applicants will have to cover otherwise. The workshop is supported by the Udo Keller Stiftung (Hamburg), the CID (Computing with Infinite Data) programme of the European Commission and a JSPS core-to-core project. Klaus Mainzer Peter Schuster Helmut Schwichtenberg ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. From nad at cse.gu.se Thu May 16 12:56:14 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 16 May 2019 12:56:14 +0200 Subject: [Agda] HITs without paths Message-ID: <8d6dfa5f-8bc3-9a94-42ee-6df5c22873c5@cse.gu.se> Hi, Now we have Cubical Agda with HITs. When you define a HIT you have to use path equality for the higher constructors. However, perhaps you want to use some other kind of equality (the cubical identity type or, for the time being at the cost of losing canonicity, propositional equality). In my case I had a development that made use of postulated HITs and propositional equality, and I wanted to replace the postulated HITs, but I did not want to switch to path equality. Let me illustrate how this can be accomplished, using the circle as a first example. I'm defining the circle in a module that is parametrised by an arbitrary notion of "equality with J", axiomatised in a certain way (for details, see the links below). I will construct an interface to the circle that uses this equality, denoted by _?_. Here's a definition of the circle as a HIT: data ?? : Set where base : ?? loop? : base P.? base P._?_ stands for path equality. Any two "equalities with J" are isomorphic (with the isomorphisms mapping reflexivity to reflexivity), so we can turn path equality into _?_: loop : base ? base loop = _?_.from ??? loop? Let us now construct an eliminator for the circle, matching the eliminator discussed in the HoTT book. Given a motive P : ?? ? Set p, a value b : P base and an equality ? : subst P loop b ? b the eliminator "elim" should have type (x : ??) ? P x, it should map base to b, and the equality dcong elim loop ? ? should hold (where dcong has type (x?y : x ? y) ? subst B x?y (f x) ? f y): elim : (x : ??) ? P x elim base = b elim (loop? i) = ? As can be seen above the base case is easy to handle. What about the case for loop?? Here we should provide some value in P (loop? i) that is definitionally equal to b when i is 0? or 1?: elim (loop? i) = lemma i where lemma : P.[ (? i ? P (loop? i)) ] b ? b lemma = ? Here I will make use of the following bijection (where all equalities are path equalities): heterogeneous?homogeneous : (P : I ? Set p) {p : P 0?} {q : P 1?} ? ([ P ] p ? q) ? transport P 0? p ? q (P.[_]_?_ is dependent path equality, and I'm using the name transport for Agda.Primitive.Cubical.primTransp.) This bijection can be used to prove the following lemma: subst??[]? : {eq : x P.? y} ? subst B (_?_.from ??? eq) u ? v ? P.[ (? i ? B (eq i)) ] u ? v This lemma can be used to complete the definition of elim, using the assumption ? : subst P loop b ? b: elim (loop? i) = subst??[]? ? i We should also prove that dcong elim loop ? ?. This follows from the following lemma: dcong-subst??[]? : {eq? : x P.? y} {eq? : subst B (_?_.from ??? eq?) (f x) ? f y} ? P.hcong f eq? ? subst??[]? eq? ? dcong f (_?_.from ??? eq?) ? eq? Here P.hcong has the following type (where all equalities are path equalities): (f : (x : A) ? B x) (x?y : x ? y) ? [ (? i ? B (x?y i)) ] f x ? f y The equality P.hcong elim base? ? subst??[]? ? holds by definition. Here is the complete definition of the eliminator: module Elim (P : ?? ? Set p) (b : P base) (? : subst P loop b ? b) where elim : (x : ??) ? P x elim base = b elim (loop? i) = subst??[]? ? i elim-loop : dcong elim loop ? ? elim-loop = dcong-subst??[]? (refl _) A non-dependent eliminator can easily be derived from the dependent one: module Rec (b : A) (? : b ? b) where private module E = Elim (const A) b (subst (const A) loop b ?? subst-const _ ? b ?? ? ?? b ?) rec : ?? ? A rec = E.elim rec-loop : cong rec loop ? ? rec-loop = dcong??cong? E.elim-loop Here the lemma dcong??cong? has the following type: {x?y : x ? y} {fx?fy : f x ? f y} ? dcong f x?y ? trans (subst-const _) fx?fy ? cong f x?y ? fx?fy However, in this case it may be preferable to define a non-dependent eliminator directly: module Rec (b : A) (? : b ? b) where rec : ?? ? A rec base = b rec (loop? i) = _?_.to ??? ? i rec-loop : cong rec loop ? ? rec-loop = cong-??? (refl _) Here the lemma cong-??? has been used: {eq? : x P.? y} {eq? : f x ? f y} ? P.cong f eq? ? _?_.to ??? eq? ? cong f (_?_.from ??? eq?) ? eq? Let us now see how a truncated HIT can be handled: the propositional truncation operator. Here is the underlying HIT: data ?_? (A : Set a) : Set a where ?_? : A ? ? A ? truncation-is-proposition? : P.Is-proposition ? A ? The truncation constructor can be turned into a function that uses _?_ instead of path equality: truncation-is-proposition : Is-proposition ? A ? truncation-is-proposition = _?_.from (H-level?H-level 1) truncation-is-proposition? Here I have used the fact that the H-level predicate for _?_ is pointwise isomorphic to the H-level predicate for path equality. The eliminator can be defined in the following way: elim : (P : ? A ? ? Set p) ? (? x ? Is-proposition (P x)) ? ((x : A) ? P ? x ?) ? (x : ? A ?) ? P x elim P P-prop f ? x ? = f x elim P P-prop f (truncation-is-proposition? x y i) = lemma i where lemma : P.[ (? i ? P (truncation-is-proposition? x y i)) ] elim P P-prop f x ? elim P P-prop f y lemma = P.heterogeneous-irrelevance (_?_.to (H-level?H-level 1) ? P-prop) The case for the truncation constructor uses the lemma heterogeneous-irrelevance (all equalities in the type signature are path equalities): heterogeneous-irrelevance : {P : A ? Set p} ? (? x ? Is-proposition (P x)) ? {x?y : x ? y} {p? : P x} {p? : P y} ? [ (? i ? P (x?y i)) ] p? ? p? This lemma follows directly from the following isomorphism (where again all equalities are path equalities): ? (P : I ? Set p) i ? H-level (suc n) (P i) ? (? x y ? H-level n ([ P ] x ? y)) Note the similarity to Voevodsky's definition of h-levels. This isomorphism in turn follows from heterogeneous?homogeneous. Set truncation constructors can be handled in a similar way, see the set quotients that I link to below. A potential disadvantage of the approach outlined above is that it uses eliminators rather than pattern matching, and one might lose out on some of the advantages of the cubical approach. An advantage might be that one can work with something that one is familiar with, rather than dimension variables, paths, and so on. Wrapping one's head around Cubical Agda can take a while. For instance, it was nontrivial for me to prove heterogeneous?homogeneous, but I got some useful help from Anders M?rtberg and Andrea Vezzosi (and once I was done Andrea informed me that he had proved the result while I was working on it). The approach above has worked for all HITs that I have tried to apply it to. Links to some code listings: * The circle: http://www.cse.chalmers.se/~nad/listings/equality/Circle.html * The propositional truncation operator: http://www.cse.chalmers.se/~nad/listings/equality/H-level.Truncation.Propositional.html * Set quotients: http://www.cse.chalmers.se/~nad/listings/equality/Quotient.html * The interval: http://www.cse.chalmers.se/~nad/listings/equality/Interval.html * Suspensions: http://www.cse.chalmers.se/~nad/listings/equality/Suspension.html * A general truncation operator: http://www.cse.chalmers.se/~nad/listings/equality/H-level.Truncation.html Links in these files lead in one or more steps to the other definitions mentioned above. The code above can be found in my "equality" library: git clone http://www.cse.chalmers.se/~nad/repos/equality/ Quite a few modules in this library are parametrised by an arbitrary notion of "equality with J", and can be instantiated with at least propositional equality, path equality, and the cubical identity type. Fredrik Nordvall Forsberg recently worked on making Agda ensure that modules with the K rule turned off do not depend on modules with the K rule turned on, and I turned off the K rule in a majority of the standard library's modules. Now it is, at least in some cases, straightforward to use modules from the equality library and the standard library in the same development. Here is one example: {-# OPTIONS --cubical --safe #-} -- Standard library modules. open import Data.Product open import Relation.Binary.PropositionalEquality using (_?_) -- Equality library modules. open import Equality.Propositional hiding (_?_) open import H-level.Truncation.Propositional equality-with-J as T using (?_?) -- Mere existence. Exists : (A : Set) ? (A ? Set) ? Set Exists A B = ? ? A B ? -- A non-dependent eliminator. rec : {A C : Set} {B : A ? Set} ? Is-proposition C ? ((x : A) ? B x ? C) ? Exists A B ? C rec p f = T.rec p (uncurry f) -- /NAD From fredrik.nordvall-forsberg at strath.ac.uk Thu May 16 17:45:03 2019 From: fredrik.nordvall-forsberg at strath.ac.uk (Fredrik Nordvall Forsberg) Date: Thu, 16 May 2019 16:45:03 +0100 Subject: [Agda] Scottish Programming Languages and Verification Summer School Message-ID: <780dd53f-c0cf-2a9c-8e86-948f6d1178c4@strath.ac.uk> +-----------------------------------------------------------------+ | | | Scottish Programming Languages and Verification Summer School | | The University of Strathclyde, Glasgow, UK, 5--9 August 2019 | | http://www.macs.hw.ac.uk/splv/splv19/ | | | +-----------------------------------------------------------------+ The inaugural Scottish Programming Languages and Verification Summer School will be held at the University of Strathclyde 5--9 August 2019. The aim of the school is to provide PhD students with core and specialised knowledge in the broad area of Programming Language and Verification research. COURSES ======= Invited course -------------- Chung-chieh Shan (Indiana University) "Probabilistic programming" Core courses ------------ Phil Wadler (University of Edinburgh) "Programming Foundations in Agda" Neil Ghani (University of Strathclyde) "Category Theory" Specialised courses ------------------- Chris Brown (University of St Andrews) "Parallel Programming" Ornela Dardha (University of Glasgow) "Session Types" Conor McBride (University of Strathclyde) "Dependently Typed Programming" Greg Michaelson and Rob Stewart (Heriot-Watt University) "Domain-Specific Languages" PREREQUISITES ============= The school is aimed at PhD students in programming languages, verification and related areas. Also researchers and practitioners will be very welcome, as will strong master's students with the support of a supervisor. Participants will need to have a background in computer science, mathematics or a related discipline, and have basic familiarity with (functional) programming and logic. DATES ===== Early registration deadline: 4 July 2019. School: Monday 5 August to Friday 9 August 2019. SPONSORSHIP =========== The summer school is generously sponsored by SICSA, the Scottish Informatics and Computer Science Alliance, and partially supported by ERC grant Skye (grant no 682315) and the UK Manycore Network. We also offer a range of sponsorship opportunities for industry with attractive benefits -- please get in touch if you are interested. REGISTRATION ============ Registration will open soon. Since the school is sponsored by SICSA, attendance will be *free* for PhD students affiliated with Scottish universities. The registration fees in general are as follows: SICSA student: ?0. Academic: ?160. Industry: ?300. The registration fee covers coffee breaks, lunches and an excursion. ACCOMMODATION ============= We can offer accommodation in student dorms for ?170. Alternatively, there are plenty of hotels, hostels or Airbnbs in central Glasgow. FURTHER INFORMATION =================== More information can be found on the school webpage: http://www.macs.hw.ac.uk/splv/splv19/ Please contact one of the local organisers if you have any questions: - Bob Atkey robert.atkey at strath.ac.uk - Clemens Kupke clemens.kupke at strath.ac.uk - Fredrik Nordvall Forsberg fredrik.nordvall-forsberg at strath.ac.uk -- Fredrik Nordvall Forsberg, Department of Computer and Information Sciences, University of Strathclyde. The University of Strathclyde is a charitable body, registered in Scotland, with registration number SC015263. From alhassm at mcmaster.ca Thu May 16 22:09:48 2019 From: alhassm at mcmaster.ca (Musa Al-hassy) Date: Thu, 16 May 2019 16:09:48 -0400 Subject: [Agda] TC: `freshName`s are not in scope In-Reply-To: References: Message-ID: Dear Agda Community, When I attempt to unquote a declaration where a `Name` is not provided, but instead created using `freshName`, the resulting function is not in scope. I want to create functions based on lists of terms, so the option of passing in names is not ideal. Here is the current scenerario ---a minimal example is below, and attached. {- Works, but is undesirable } unquoteDecl identity = ?make the identity function? {- Desirable but "identity" is not in scope. -} unquoteDecl = do ? ? freshName "identity" ?make the identity function? Moreover, regarding reflection is it possible to unquote a datatype or a record declaration? Does anyone have any documentation on how to use the /current/, or a /recent/, version of Agda's reflection mechanism. ( My personal notes can be found here: https://github.com/alhassy/gentle-intro-to-reflection ) Best regards, Musa Al-hassy ------------------------------------------------------------------------ module tangled where open import Relation.Binary.PropositionalEquality hiding ([_]) open import Data.List as List open import Reflection open import Data.Nat open import Data.Unit _>>=_ : ? {a b} {A : Set a} {B : Set b} ? TC A ? (A ? TC B) ? TC B _>>=_ = bindTC _>>_ : ? {a b} {A : Set a} {B : Set b} ? TC A ? TC B ? TC B _>>_ = ? p q ? p >>= (? _ ? q) {- ?isible ?elevant ?rgument -} ??? : {A : Set} ? A ? Arg A ??? = arg (arg-info visible relevant) unquoteDecl = do ? ? freshName "identity" ? ? quoteTC (? {A : Set} ? A ? A) declareDef (??? ?) ? defineFun ? [ clause [ ??? (var "x") ] (var 0 []) ] {- -- ?identity? is not in scope!? _ : ? {x : ?} ? identity x ? x _ = refl -} -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: tangled.agda Type: application/octet-stream Size: 897 bytes Desc: not available URL: From Jesper at sikanda.be Fri May 17 09:58:01 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Fri, 17 May 2019 09:58:01 +0200 Subject: [Agda] TC: `freshName`s are not in scope In-Reply-To: References: Message-ID: Hi Musa, What you're trying to do is currently not possible because of limitations of Agda's scope checker: it scope checks the *complete* file before any typechecking can happen or any reflection code is run, so any names generated through reflection appear 'too late' to be in scope. For the same reason it's not possible to generate data/record types from reflection directly, since the scope checker wouldn't know about the constructor/field names. It is however already possible to generate the *types* of the constructors or fields through reflection. I've also been annoyed by the lack of a good reflection tutorial in the past, but so far I haven't found the time yet to write something up. So the best way to learn more about reflection is by reading the documentation and looking at examples, e.g. my ataca library. I think there's definitely an audience for a good proper tutorial like the one you're writing. Perhaps if you agree we could link to it from the list of tutorials at https://agda.readthedocs.io/en/v2.6.0/getting-started/tutorial-list.html and/or from the reflection documentation. -- Jesper On Thu, May 16, 2019 at 10:10 PM Musa Al-hassy wrote: > Dear Agda Community, > > When I attempt to unquote a declaration where a `Name` is not provided, > but instead created using `freshName`, > the resulting function is not in scope. I want to create functions based > on lists of terms, so the option of passing > in names is not ideal. > > Here is the current scenerario ---a minimal example is below, and attached. > > {- Works, but is undesirable } > unquoteDecl identity = ?make the identity function? > > {- Desirable but "identity" is not in scope. -} > unquoteDecl = do ? ? freshName "identity" > ?make the identity function? > > Moreover, regarding reflection is it possible to unquote a datatype or a > record declaration? > Does anyone have any documentation on how to use the /current/, > or a /recent/, version of Agda's reflection mechanism. > ( My personal notes can be found here: > https://github.com/alhassy/gentle-intro-to-reflection ) > > Best regards, > > Musa Al-hassy > > ------------------------------------------------------------------------ > module tangled where > > open import Relation.Binary.PropositionalEquality hiding ([_]) > open import Data.List as List > open import Reflection > open import Data.Nat > open import Data.Unit > > _>>=_ : ? {a b} {A : Set a} {B : Set b} ? TC A ? (A ? TC B) ? TC B > _>>=_ = bindTC > _>>_ : ? {a b} {A : Set a} {B : Set b} ? TC A ? TC B ? TC B > _>>_ = ? p q ? p >>= (? _ ? q) > > {- ?isible ?elevant ?rgument -} > ??? : {A : Set} ? A ? Arg A > ??? = arg (arg-info visible relevant) > > unquoteDecl > = do ? ? freshName "identity" > ? ? quoteTC (? {A : Set} ? A ? A) > declareDef (??? ?) ? > defineFun ? [ clause [ ??? (var "x") ] (var 0 []) ] > > {- > -- ?identity? is not in scope!? > _ : ? {x : ?} ? identity x ? x > _ = refl > -} > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From asr at eafit.edu.co Sat May 18 01:51:22 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Fri, 17 May 2019 23:51:22 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.0.1 Message-ID: Dear all, The Agda Team is very pleased to announce the release of Agda 2.6.0.1. In this bug-fix release, we fixed a regression in Agda 2.5.4.2 related to mutual and abstract blocks, and a regression in Agda 2.5.4 related to `AgdaAny`. See the details of these regressions and other issues fixed in http://hackage.haskell.org/package/Agda-2.6.0.1/changelog * GHC supported versions Agda 2.6.0.1 has been tested with GHC 8.6.5, 8.4.4, 8.2.2, 8.0.2 and 7.10.3 on Linux, macOS and Windows. Note that this version of Agda cannot be installed on Windows using GHC 8.6.3 due to a GHC bug. * Installation cabal update && cabal install Agda * Standard library The standard library 1.0.1 is compatible with Agda 2.6.0.1. Enjoy Agda 2.6.0.1. -- Andr?s on behalf of the Agda Team From aaron-stump at uiowa.edu Sat May 18 23:41:20 2019 From: aaron-stump at uiowa.edu (Aaron Stump) Date: Sat, 18 May 2019 16:41:20 -0500 Subject: [Agda] rewriting reveals extra arguments Message-ID: <728ab11e-eff0-2369-4329-ef72bbabf531@uiowa.edu> Hello, Agda community.? I am working on a development where rewriting can reveal extra arguments.? A self-contained example is below (tested with Agda 2.5.4.1; sorry I have not had time to upgrade to 2.6.x yet).? I am wondering if there is a way these extra arguments can be matched on the left-hand side of the equation, rather than needing to handle them with abstractions on the right-hand side (as happens in the myfun example).? Agda does an amazing job when definitional equality reveals extra arguments.? I'm just wondering if there is a trick for when rewriting reveals them. Thanks for any advice. Best, Aaron ------------------------------------ module rewrite-reveal where -- boilerplate for ? import Agda.Primitive open Agda.Primitive public ? using??? (Level ; _?_ ; lsuc ; lzero) data _?_ {?} {A : Set ?} (x : A) : A ? Set ? where ? refl : x ? x infix 3 _?_ {-# BUILTIN EQUALITY _?_ #-} -- booleans data ? : Set where ?tt : ? ?ff : ? _&&_ : ? ? ? ? ? tt && b = b ff && b = ff if_then_else_ : ? {?} {A : Set ?} ? ? ? A ? A ? A if tt then y else z = y if ff then y else z = z -- rewriting reveals extra arguments myfun : ?{b : ?} ? b && b ? tt ? if b && b then (? ? ? ? ?) else ? myfun p rewrite p = ? x y ? x -- similar but unification resolves myfun-easier : ?{b : ?} ? b ? tt ? if b then (? ? ? ? ?) else ? myfun-easier refl x y = x From fdhzs2010 at hotmail.com Sun May 19 20:33:27 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sun, 19 May 2019 18:33:27 +0000 Subject: [Agda] Load libraries based on version? Message-ID: Hi all, since Agda and libraries aren't really in the most stable state, I figured it might be useful to use multiple versions of Agda for different things. My question is, is there a way to load libraries based on Agda's version? I am currently managing libraries using ~/.agda folder. It would be nice if somehow there are configuration files that can tell what version to load what. Thanks, Jason Hu https://hustmphrrr.github.io/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Sun May 19 20:39:02 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Sun, 19 May 2019 20:39:02 +0200 Subject: [Agda] Load libraries based on version? In-Reply-To: References: Message-ID: This is currently not possible as far as I'm aware. You could try to just have different .agda folders and switch between them when you switch agda versions. -- Jesper On Sun, May 19, 2019 at 8:34 PM Jason -Zhong Sheng- Hu < fdhzs2010 at hotmail.com> wrote: > Hi all, > > since Agda and libraries aren't really in the most stable state, I figured > it might be useful to use multiple versions of Agda for different things. > My question is, is there a way to load libraries based on Agda's version? I > am currently managing libraries using ~/.agda folder. It would be nice if > somehow there are configuration files that can tell what version to load > what. > > *Thanks,* > *Jason Hu* > *https://hustmphrrr.github.io/ * > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From a.j.rouvoet at gmail.com Mon May 20 11:39:43 2019 From: a.j.rouvoet at gmail.com (a.j.rouvoet) Date: Mon, 20 May 2019 11:39:43 +0200 Subject: [Agda] Load libraries based on version? In-Reply-To: References: Message-ID: Alternatively you can checkout the libraries you need in your project in a `lib/` directory and use the project local `.agda-lib` file to include the paths by default on the project's agda path: name: example include: ? ./src/ ? ./lib/stdlib.agda/src/ ? ./lib/cubical.agda/ This works really well and has the additional benefit to be self contained. Arjen On 5/19/19 8:39 PM, Jesper Cockx wrote: > This is currently not possible as far as I'm aware. You could try to > just have different .agda folders and switch between them when you > switch agda versions. > > -- Jesper > > On Sun, May 19, 2019 at 8:34 PM Jason -Zhong Sheng- Hu > > wrote: > > Hi all, > > since Agda and libraries aren't really in the most stable state, I > figured it might be useful to use multiple versions of Agda for > different things. My question is, is there a way to load libraries > based on Agda's version? I am currently managing libraries using > ~/.agda folder. It would be nice if somehow there are > configuration files that can tell what version to load what. > > *Thanks,* > *Jason Hu* > *https://hustmphrrr.github.io/* > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From kaposi.ambrus at gmail.com Mon May 20 16:58:20 2019 From: kaposi.ambrus at gmail.com (Ambrus Kaposi) Date: Mon, 20 May 2019 16:58:20 +0200 Subject: [Agda] PhD studentship in Budapest Message-ID: Dear All, The Faculty of Computer Science at E?tv?s Lor?nd University is advertising a PhD position in type theory. The prospective student would work together with Ambrus Kaposi and Andr?s Kov?cs. PhD scholarship is 300thousand HUF net a month and the PhD programme lasts 4 years. The deadline for applications is 31 May. The application process is described here: https://www.inf.elte.hu/en/content/application-process.t.1834 If you are interested or know someone who is interested, please contact me directly as well. Students interested in other topics are also welcome, here is the full list of advertised topics of the Faculty of Informatics: https://doktori.hu/index.php?menuid=116&num=22&lang=EN Best wishes, Ambrus Kaposi Department of Programming Languages and Compilers Faculty of Informatics E?tv?s Lor?nd University Budapest, Hungary From fdhzs2010 at hotmail.com Mon May 20 22:20:56 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Mon, 20 May 2019 20:20:56 +0000 Subject: [Agda] Load libraries based on version? In-Reply-To: References: , Message-ID: Hi all, thx Guillaume, I found it in the doc: https://agda.readthedocs.io/en/v2.6.0.1/tools/package-system.html#installing-libraries I will try if it works. Arjen, you are right. it's very good for projects, and submodule can make everything consistent. I should probably do it. but it would also be useful for a global configuration when the goal is to quickly try things out. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of a.j.rouvoet Sent: May 20, 2019 5:39 AM To: agda at lists.chalmers.se Subject: Re: [Agda] Load libraries based on version? Alternatively you can checkout the libraries you need in your project in a `lib/` directory and use the project local `.agda-lib` file to include the paths by default on the project's agda path: name: example include: ./src/ ./lib/stdlib.agda/src/ ./lib/cubical.agda/ This works really well and has the additional benefit to be self contained. Arjen On 5/19/19 8:39 PM, Jesper Cockx wrote: This is currently not possible as far as I'm aware. You could try to just have different .agda folders and switch between them when you switch agda versions. -- Jesper On Sun, May 19, 2019 at 8:34 PM Jason -Zhong Sheng- Hu > wrote: Hi all, since Agda and libraries aren't really in the most stable state, I figured it might be useful to use multiple versions of Agda for different things. My question is, is there a way to load libraries based on Agda's version? I am currently managing libraries using ~/.agda folder. It would be nice if somehow there are configuration files that can tell what version to load what. Thanks, Jason Hu https://hustmphrrr.github.io/ _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Mon May 20 22:36:38 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Mon, 20 May 2019 20:36:38 +0000 Subject: [Agda] Load libraries based on version? In-Reply-To: References: , , Message-ID: quote a part from the doc: To be found by Agda a library file has to be listed (with its full path) in a libraries file * AGDA_DIR/libraries-VERSION, or if that doesn?t exist * AGDA_DIR/libraries where VERSION is the Agda version (for instance 2.5.1). This method works for 2.6, but not for 2.5.4.2. but for 2.6, since it uses libraries-2.6 first, I just make libaries-2.5.4.2 to be libraries and everything works well. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of Jason -Zhong Sheng- Hu Sent: May 20, 2019 4:20 PM To: a.j.rouvoet; agda at lists.chalmers.se Subject: Re: [Agda] Load libraries based on version? Hi all, thx Guillaume, I found it in the doc: https://agda.readthedocs.io/en/v2.6.0.1/tools/package-system.html#installing-libraries I will try if it works. Arjen, you are right. it's very good for projects, and submodule can make everything consistent. I should probably do it. but it would also be useful for a global configuration when the goal is to quickly try things out. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of a.j.rouvoet Sent: May 20, 2019 5:39 AM To: agda at lists.chalmers.se Subject: Re: [Agda] Load libraries based on version? Alternatively you can checkout the libraries you need in your project in a `lib/` directory and use the project local `.agda-lib` file to include the paths by default on the project's agda path: name: example include: ./src/ ./lib/stdlib.agda/src/ ./lib/cubical.agda/ This works really well and has the additional benefit to be self contained. Arjen On 5/19/19 8:39 PM, Jesper Cockx wrote: This is currently not possible as far as I'm aware. You could try to just have different .agda folders and switch between them when you switch agda versions. -- Jesper On Sun, May 19, 2019 at 8:34 PM Jason -Zhong Sheng- Hu > wrote: Hi all, since Agda and libraries aren't really in the most stable state, I figured it might be useful to use multiple versions of Agda for different things. My question is, is there a way to load libraries based on Agda's version? I am currently managing libraries using ~/.agda folder. It would be nice if somehow there are configuration files that can tell what version to load what. Thanks, Jason Hu https://hustmphrrr.github.io/ _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From icfp.publicity at googlemail.com Mon May 20 23:24:53 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Mon, 20 May 2019 17:24:53 -0400 Subject: [Agda] Second Call for Tutorial Proposals: ICFP 2019 Message-ID: <5ce31b2534436_3be82b1fe4fb05d461610@homer.mail> *EXTENDED DEADLINE* - CALL FOR TUTORIAL PROPOSALS ICFP 2019 24th ACM SIGPLAN International Conference on Functional Programming August 18 - 23, 2019 Berlin, Germany https://icfp19.sigplan.org/ The 24th ACM SIGPLAN International Conference on Functional Programming will be held in Berlin, Germany on August 18-23, 2019. ICFP provides a forum for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. Proposals are invited for tutorials, lasting approximately 3 hours each, to be presented during ICFP and its co-located workshops and other events. These tutorials are the successor to the CUFP tutorials from previous years, but we also welcome tutorials whose primary audience is researchers rather than practitioners. Tutorials may focus either on a concrete technology or on a theoretical or mathematical tool. Ideally, tutorials will have a concrete result, such as "Learn to do X with Y" rather than "Learn language Y". Tutorials may occur after ICFP co-located with the associated workshops, from August 22 till August 23. ---------------------------------------------------------------------- Submission details Deadline for submission: June 3rd, 2019 Notification of acceptance: June 10th, 2019 Prospective organizers of tutorials are invited to submit a completed tutorial proposal form in plain text format to the ICFP 2018 workshop co-chairs (Jennifer Hackett and Christophe Scholliers), via email to icfp-workshops-2019 at googlegroups.com by June 3rd, 2019. Please note that this is a firm deadline. Organizers will be notified if their event proposal is accepted by June 10th, 2019. The proposal form is available at: http://www.icfpconference.org/icfp2019-files/icfp19-tutorials-form.txt ---------------------------------------------------------------------- Selection committee The proposals will be evaluated by a committee comprising the following members of the ICFP 2019 organizing committee. Tutorials Co-Chair: Jennifer Hackett (University of Nottingham) Tutorials Co-Chair: Christophe Scholliers (University of Ghent) General Chair: Derek Dreyer (MPI-SWS) Program Chair: Fran?ois Pottier ( Inria, France) ---------------------------------------------------------------------- Further information Any queries should be addressed to the tutorial co-chairs (Jennifer Hackett and Christophe Scholliers), via email to icfp-workshops-2019 at googlegroups.com From david.nowak at univ-lille.fr Tue May 21 16:49:52 2019 From: david.nowak at univ-lille.fr (David Nowak) Date: Tue, 21 May 2019 16:49:52 +0200 Subject: [Agda] ENTROPY 2019: Call for Participation - Co-located with EuroS&P'19 Message-ID: <03CCAC24-6CA5-4F67-B580-B15F4CC1C577@univ-lille.fr> *************************************************************** Call for participation ? ENTROPY 2019 ENabling TRust through Os Proofs ? and beYond 16 June 2019 Second International workshop on the use of theorem provers for modelling and verification at the hardware-software interface https://entropy2019.sciencesconf.org Co-located with EuroS&P'19, KTH, Stockholm, June 2019 *************************************************************** PROGRAM HIGHLIGHTS Formal Proof of a Secure OS Full Trusted Computing Base by Dominique Bolignano, Prove & Run Time protection: principled prevention of timing channels by Gernot Heiser, University of New South Wales Proving the security of interrupt handling against interrupt-based side-channel attacks: a case study by Frank Piessens, KU Leuven Nailing Down the Architectural Abstraction by Peter Sewell, University of Cambridge From P.Achten at cs.ru.nl Tue May 21 17:09:54 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Tue, 21 May 2019 17:09:54 +0200 Subject: [Agda] [TFP'19 and TFPIE'19] call for participation Message-ID: <4911e141-940d-b2e3-f5de-ad71103da3e2@cs.ru.nl> ??????????????????????? --------------------------------- ??????????????????? C A L L? F O R? P A R T I C I P A T I O N ??????????????????????? --------------------------------- ??????????????????????????? ====== TFP 2019 ====== ??????????????? 20th Symposium on Trends in Functional Programming ???????????????????????????????? 12-14 June, 2019 ??????????????????????????????? Vancouver, BC, CA ??????????????????????? https://www.tfp2019.org/index.html ?????????????????????????? ====== TFPIE 2019 ====== ?? 8th International Workshop on Trends in Functional Programming in Education ???????????????????????????????? 11 June, 2019 ?????????????????????????????? Vancouver, BC, CA http://www.staff.science.uu.nl/~hage0101/tfpie2019/index.html The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions (see below at scope). Please be aware that TFP uses two distinct rounds of submissions (see below at submission details). TFP 2019 will be the main event of a pair of functional programming events. TFP 2019 will be accompanied by the International Workshop on Trends in Functional Programming in Education (TFPIE), which will take place on June 11. == Invited Speakers == TFP 2019 is pleased to announce keynote talks by the following two invited speakers: Nikhil Swamy, Microsoft Research: Structuring the Verification of Imperative Programs with ????????????????????????????????? Functional Programming Frank Wood, University of British Columbia: Probabilistic Programming TFPIE 2019 is pleased to have the following invited speaker: Gregor Kiczales: Functional Programming at the Core of a High Throughput Software ???????????????? Engineering Curriculum == Scope == The symposium recognizes that new trends may arise through various routes. As part of the Symposium's focus on trends we therefore identify the following five article categories. High-quality articles are solicited in any of these categories: ??? Research Articles: ??????? Leading-edge, previously unpublished research work ??? Position Articles: ??????? On what new trends should or should not be ??? Project Articles: ??????? Descriptions of recently started new projects ??? Evaluation Articles: ??????? What lessons can be drawn from a finished project ??? Overview Articles: ??????? Summarizing work with respect to a trendy subject Articles must be original and not simultaneously submitted for publication to any other forum. They may consider any aspect of functional programming: theoretical, implementation-oriented, or experience-oriented. Applications of functional programming techniques to other languages are also within the scope of the symposium. Topics suitable for the symposium include, but are not limited to: ??? Functional programming and multicore/manycore computing ??? Functional programming in the cloud ??? High performance functional computing ??? Extra-functional (behavioural) properties of functional programs ??? Dependently typed functional programming ??? Validation and verification of functional programs ??? Debugging and profiling for functional languages ??? Functional programming in different application areas: ??? security, mobility, telecommunications applications, embedded ??? systems, global computing, grids, etc. ??? Interoperability with imperative programming languages ??? Novel memory management techniques ??? Program analysis and transformation techniques ??? Empirical performance studies ??? Abstract/virtual machines and compilers for functional languages ??? (Embedded) domain specific languages ??? New implementation strategies ??? Any new emerging trend in the functional programming area If you are in doubt on whether your article is within the scope of TFP, please contact the TFP 2019 program chairs, William J. Bowman and Ron Garcia. == Best Paper Awards == To reward excellent contributions, TFP awards a prize for the best paper accepted for the formal proceedings. TFP traditionally pays special attention to research students, acknowledging that students are almost by definition part of new subject trends. A student paper is one for which the authors state that the paper is mainly the work of students, the students are listed as first authors, and a student would present the paper. A prize for the best student paper is awarded each year. In both cases, it is the PC of TFP that awards the prize. In case the best paper happens to be a student paper, that paper will then receive both prizes. == Instructions to Author == Papers must be submitted at: ??? https://easychair.org/conferences/?conf=tfp2019 Authors of papers have the choice of having their contributions formally reviewed either before or after the Symposium. == Pre-symposium formal review == Papers to be formally reviewed before the symposium should be submitted before an early deadline and receive their reviews and notification of acceptance for both presentation and publication before the symposium. A paper that has been rejected in this process may still be accepted for presentation at the symposium, but will not be considered for the post-symposium formal review. == Post-symposium formal review == Papers submitted for post-symposium review (draft papers) will receive minimal reviews and notification of acceptance for presentation at the symposium. Authors of draft papers will be invited to submit revised papers based on the feedback received at the symposium. A post-symposium refereeing process will then select a subset of these articles for formal publication. == Paper categories == There are two types of submission, each of which can be submitted either for pre-symposium or post-symposium review: ??? Extended abstracts. Extended abstracts are 4 to 10 pages in length. ??? Full papers.??????? Full papers are up to 20 pages in length. Each submission also belongs to a category: ??? research ??? position ??? project ??? evaluation ??? overview paper Each submission should clearly indicate to which category it belongs. Additionally, a draft paper submission?of either type (extended abstract or full paper) and any category?can be considered a student paper. A student paper is one for which primary authors are research students and the majority of the work described was carried out by the students. The submission should indicate that it is a student paper. Student papers will receive additional feedback from the PC shortly after the symposium has taken place and before the post-symposium submission deadline. Feedback is only provided for accepted student papers, i.e., papers submitted for presentation and post-symposium formal review that are accepted for presentation. If a student paper is rejected for presentation, then it receives no further feedback and cannot be submitted for post-symposium review. == Format == Papers must be written in English, and written using the LNCS style. For more information about formatting please consult the Springer LNCS web site (http://www.springer.com/lncs). == Program Committee == Program Co-chairs William J. Bowman????????? University of British Columbia Ronald Garcia????????????? University of British Columbia Matteo Cimini????????????? University of Massachusetts Lowell Ryan Culpepper???????????? Czech Technical Institute Joshua Dunfield??????????? Queen's University Sam Lindley??????????????? University of Edinburgh Assia Mahboubi???????????? INRIA Nantes Christine Rizkallah??????? University of New South Wales Satnam Singh?????????????? Google AI Marco T. Moraz?n?????????? Seton Hall University John Hughes??????????????? Chalmers University and Quviq Nicolas Wu???????????????? University of Bristol Tom Schrijvers???????????? KU Leuven Scott Smith??????????????? Johns Hopkins University Stephanie Balzer?????????? Carnegie Mellon University Vikt?ria Zs?k????????????? E?tv?s Lor?nd University From Thorsten.Altenkirch at nottingham.ac.uk Wed May 22 17:03:34 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 22 May 2019 15:03:34 +0000 Subject: [Agda] problem installing agda (template Haskell ?) Message-ID: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> Hi guys, Has anybody encountered a problem installing agda in the moment? Cabal install fails with some error messages to do with template Haskell. First it says Use --force-reinstalls if you want to install anyway. But when I do it it runs into an error Building geniplate-mirror-0.7.6... Preprocessing library geniplate-mirror-0.7.6... [1 of 1] Compiling Data.Generics.Geniplate ( Data/Generics/Geniplate.hs, dist/dist-sandbox-d9c30c4b/build/Data/Generics/Geniplate.o ) Data/Generics/Geniplate.hs:264:33: error: ? Can't find interface-file declaration for type constructor or class Language.Haskell.TH.Lib.ExpQ Probable cause: bug in .hi-boot file, or inconsistent .hi file Use -ddump-if-trace to get an idea of which file caused the error ? I am using sean:agda txa$ ghc --version The Glorious Glasgow Haskell Compilation System, version 8.0.1 on a mac and the latest version of the agda repo. I attach a dump from the terminal. I tried this on 2 different machines. Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: problem.txt URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed May 22 17:29:15 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 22 May 2019 15:29:15 +0000 Subject: [Agda] problem installing agda (template Haskell ?) Message-ID: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> Hi guys, Has anybody encountered a problem installing agda in the moment? Cabal install fails with some error messages to do with template Haskell. First it says Use --force-reinstalls if you want to install anyway. But when I do it it runs into an error Building geniplate-mirror-0.7.6... Preprocessing library geniplate-mirror-0.7.6... [1 of 1] Compiling Data.Generics.Geniplate ( Data/Generics/Geniplate.hs, dist/dist-sandbox-d9c30c4b/build/Data/Generics/Geniplate.o ) Data/Generics/Geniplate.hs:264:33: error: ? Can't find interface-file declaration for type constructor or class Language.Haskell.TH.Lib.ExpQ Probable cause: bug in .hi-boot file, or inconsistent .hi file Use -ddump-if-trace to get an idea of which file caused the error ? I am using sean:agda txa$ ghc --version The Glorious Glasgow Haskell Compilation System, version 8.0.1 on a mac and the latest version of the agda repo. I attach a dump from the terminal. I tried this on 2 different machines. Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: problem.txt URL: From liang.ting.chen.tw at gmail.com Wed May 22 18:32:10 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Wed, 22 May 2019 17:32:10 +0100 Subject: [Agda] problem installing agda (template Haskell ?) In-Reply-To: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> References: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> Message-ID: Hi Thorsten, It seems that there is a bug in GHC 8.0.? hit by the recent commits as there is also another issue on GitHub https://github.com/agda/agda/issues/3792 when Agda is compiled with 8.0.2. I have compiled successfully the latest Agda with GHC 8.6.5 using stack on a macOS 10.14.4. Hope this helps. Best regards, Liang-Ting On Wed, 22 May 2019 at 16:30, Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > Hi guys, > > > > Has anybody encountered a problem installing agda in the moment? Cabal > install fails with some error messages to do with template Haskell. First > it says > > > > Use --force-reinstalls if you want to install anyway. > > > > But when I do it it runs into an error > > > > Building geniplate-mirror-0.7.6... > > Preprocessing library geniplate-mirror-0.7.6... > > [1 of 1] Compiling Data.Generics.Geniplate ( Data/Generics/Geniplate.hs, > dist/dist-sandbox-d9c30c4b/build/Data/Generics/Geniplate.o ) > > > > Data/Generics/Geniplate.hs:264:33: error: > > ? Can't find interface-file declaration for type constructor or class > Language.Haskell.TH.Lib.ExpQ > > Probable cause: bug in .hi-boot file, or inconsistent .hi file > > Use -ddump-if-trace to get an idea of which file caused the error > > > > ? > > > > I am using > > sean:agda txa$ ghc --version > > The Glorious Glasgow Haskell Compilation System, version 8.0.1 > > on a mac and the latest version of the agda repo. > > > > I attach a dump from the terminal. I tried this on 2 different machines. > > > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Wed May 22 18:47:23 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Wed, 22 May 2019 17:47:23 +0100 Subject: [Agda] Prop in Agda 2.6 Message-ID: I?m interested in using the built-in sort of definitionally proof-irrelevant propositions that Agda 2.6 introduced. I have readthedocs at . For the development I have in mind (which assumes axiom K) I need Prop to be extensional postulate propext : {l : Level} {P Q : Prop l} (_ : P ? Q) (_ : Q ? P) ? ------------ P ? Q and to be able to ?untruncate hprops" (in particular, to be able to untruncate identity types, in the presence of axiom K). data ?_? {l : Level}(A : Set l) : Prop l where squash : A ? ? A ? isProp : {l : Level} ? Set l ? Set l isProp A = (x y : A) ? x ? y postulate untrunc : {l : Level} {A : Set l} (_ : isProp A) ? ------------ ? A ? ? A Neither of the postulates propext or untrunc is provable in Agda 2.6, is it? I think they are logically consistent axioms. But is there a better way than just postulating them? Andy From jon at jonmsterling.com Wed May 22 19:28:42 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Wed, 22 May 2019 13:28:42 -0400 Subject: [Agda] Prop in Agda 2.6 In-Reply-To: References: Message-ID: <8ce4e36a-6961-489d-b085-ecbf4e6ee09e@www.fastmail.com> Hi Andy, This seems consistent with an interpretation of non-cubical agda into extensional type theory, but I just want to mention something I'd noticed before: if you wanted to add 'untrunc' to Agda, you might be tempted to have a beta rule. But this appropriate beta rule would induce equality reflection for proofs of propositions, which one probably doesn't want in the formal system. Best, Jon On Wed, May 22, 2019, at 12:47 PM, Andrew Pitts wrote: > I?m interested in using the built-in sort of definitionally > proof-irrelevant propositions that Agda 2.6 introduced. I have > readthedocs at > . > > For the development I have in mind (which assumes axiom K) I need Prop > to be extensional > > postulate > propext : > {l : Level} > {P Q : Prop l} > (_ : P ? Q) > (_ : Q ? P) > ? ------------ > P ? Q > > and to be able to ?untruncate hprops" (in particular, to be able to > untruncate identity types, in the presence of axiom K). > > data ?_? {l : Level}(A : Set l) : Prop l where > squash : A ? ? A ? > > isProp : {l : Level} ? Set l ? Set l > isProp A = (x y : A) ? x ? y > > postulate > untrunc : > {l : Level} > {A : Set l} > (_ : isProp A) > ? ------------ > ? A ? ? A > > Neither of the postulates propext or untrunc is provable in Agda 2.6, is it? > > I think they are logically consistent axioms. But is there a better way > than just postulating them? > > Andy > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From andrew.pitts at cl.cam.ac.uk Wed May 22 20:49:55 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Wed, 22 May 2019 19:49:55 +0100 Subject: [Agda] Prop in Agda 2.6 In-Reply-To: <8ce4e36a-6961-489d-b085-ecbf4e6ee09e@www.fastmail.com> References: <8ce4e36a-6961-489d-b085-ecbf4e6ee09e@www.fastmail.com> Message-ID: <5C92B632-93DA-4B85-B255-9A364F1F5E4A@cl.cam.ac.uk> Dear John, > On 22 May 2019, at 18:28, Jon Sterling wrote: > > Hi Andy, > > This seems consistent with an interpretation of non-cubical agda into extensional type theory, or, to put it crudely, the set theoretic model of type theory can give a model of these axioms. > but I just want to mention something I'd noticed before: if you wanted to add 'untrunc' to Agda, you might be tempted to have a beta rule. But this appropriate beta rule would induce equality reflection for proofs of propositions, which one probably doesn't want in the formal system. Interesting. Can we clarify what you mean? If A : Set and e : isProp A, then for any x : A we have that untrunc e (squash x) and x are propositionally equal (using e). Conversely for any y : ? A ? we have that squash (untrunc e y) and y are both elements of ? A ? in Prop and so are definitionally equal. Were you suggesting not making a REWRITE for untrunc e (squash x) and x? (I don?t think I need to) Andy > > Best, > Jon > > > > On Wed, May 22, 2019, at 12:47 PM, Andrew Pitts wrote: >> I?m interested in using the built-in sort of definitionally >> proof-irrelevant propositions that Agda 2.6 introduced. I have >> readthedocs at >> . >> >> For the development I have in mind (which assumes axiom K) I need Prop >> to be extensional >> >> postulate >> propext : >> {l : Level} >> {P Q : Prop l} >> (_ : P ? Q) >> (_ : Q ? P) >> ? ------------ >> P ? Q >> >> and to be able to ?untruncate hprops" (in particular, to be able to >> untruncate identity types, in the presence of axiom K). >> >> data ?_? {l : Level}(A : Set l) : Prop l where >> squash : A ? ? A ? >> >> isProp : {l : Level} ? Set l ? Set l >> isProp A = (x y : A) ? x ? y >> >> postulate >> untrunc : >> {l : Level} >> {A : Set l} >> (_ : isProp A) >> ? ------------ >> ? A ? ? A >> >> Neither of the postulates propext or untrunc is provable in Agda 2.6, is it? >> >> I think they are logically consistent axioms. But is there a better way >> than just postulating them? >> >> Andy >> >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From asr at eafit.edu.co Wed May 22 21:23:13 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Wed, 22 May 2019 19:23:13 +0000 Subject: [Agda] problem installing agda (template Haskell ?) In-Reply-To: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> References: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> Message-ID: On Wed, 22 May 2019 at 10:10, Thorsten Altenkirch wrote: > > I am using > > sean:agda txa$ ghc --version > > The Glorious Glasgow Haskell Compilation System, version 8.0.1 > > on a mac and the latest version of the agda repo. > Agda doesn't support GHC 8.0.1 (but GHC 8.0.2 is supported). GHC 8.0.1 was shipped with template-haskell-2.11.0.0 but Agda dependencies are template-haskell >= 2.11.1.0 && < 2.15 You can try to relax the above dependencies under your own risk :-) or you can use a newer GHC. Best, Andr?s From asr at eafit.edu.co Wed May 22 21:44:23 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Wed, 22 May 2019 19:44:23 +0000 Subject: [Agda] problem installing agda (template Haskell ?) In-Reply-To: References: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk> Message-ID: On Wed, 22 May 2019 at 14:22, Andr?s Sicard-Ram?rez wrote: > Agda doesn't support GHC 8.0.1 (but GHC 8.0.2 is supported). > > GHC 8.0.1 was shipped with template-haskell-2.11.0.0 but Agda dependencies are > > template-haskell >= 2.11.1.0 && < 2.15 > > You can try to relax the above dependencies under your own risk :-) or > you can use a newer GHC. > I just pushed a commit allowing template-haskell-2.11.0.0, so you shouldn't have problems installing Agda with GHC 8.0.1 (I hadn't). Best, Andr?s From jon at jonmsterling.com Wed May 22 22:04:11 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Wed, 22 May 2019 16:04:11 -0400 Subject: [Agda] Prop in Agda 2.6 In-Reply-To: <5C92B632-93DA-4B85-B255-9A364F1F5E4A@cl.cam.ac.uk> References: <8ce4e36a-6961-489d-b085-ecbf4e6ee09e@www.fastmail.com> <5C92B632-93DA-4B85-B255-9A364F1F5E4A@cl.cam.ac.uk> Message-ID: <7242e97c-5eee-41e3-b7e3-9d2dc3422f03@www.fastmail.com> Dear Andy, On Wed, May 22, 2019, at 2:50 PM, Andrew Pitts wrote: > Dear John, > > > On 22 May 2019, at 18:28, Jon Sterling wrote: > > > > Hi Andy, > > > > This seems consistent with an interpretation of non-cubical agda into extensional type theory, > > or, to put it crudely, the set theoretic model of type theory can give > a model of these axioms. > > > but I just want to mention something I'd noticed before: if you wanted to add 'untrunc' to Agda, you might be tempted to have a beta rule. But this appropriate beta rule would induce equality reflection for proofs of propositions, which one probably doesn't want in the formal system. > > Interesting. Can we clarify what you mean? If A : Set and e : isProp A, > then for any x : A we have that untrunc e (squash x) and x are > propositionally equal (using e). Conversely for any y : ? A ? we have > that squash (untrunc e y) and y are both elements of ? A ? in Prop and > so are definitionally equal. Were you suggesting not making a REWRITE > for untrunc e (squash x) and x? (I don?t think I need to) Indeed, I note that if you have such a REWRITE rule, then you can prove the following instance of equality reflection: M, N : A P : is-prop(A) ----------------------------------------- M = N : A The proof works as follows: 1. I have squash(M) == squash(N) : is-prop(A) by proof irrelevance 2. I have untrunc(P,squash(M)) == untrunc(P,squash(N)) : A by the congruence with untrunc 3. I have M == N : A by transitivity on both sides with the judgmental beta rule This is why in the proof assistant, one would not want to construe the beta principle for unsquash as a judgmental rewrite. Best, Jon > > Andy > > > > > Best, > > Jon > > > > > > > > On Wed, May 22, 2019, at 12:47 PM, Andrew Pitts wrote: > >> I?m interested in using the built-in sort of definitionally > >> proof-irrelevant propositions that Agda 2.6 introduced. I have > >> readthedocs at > >> . > >> > >> For the development I have in mind (which assumes axiom K) I need Prop > >> to be extensional > >> > >> postulate > >> propext : > >> {l : Level} > >> {P Q : Prop l} > >> (_ : P ? Q) > >> (_ : Q ? P) > >> ? ------------ > >> P ? Q > >> > >> and to be able to ?untruncate hprops" (in particular, to be able to > >> untruncate identity types, in the presence of axiom K). > >> > >> data ?_? {l : Level}(A : Set l) : Prop l where > >> squash : A ? ? A ? > >> > >> isProp : {l : Level} ? Set l ? Set l > >> isProp A = (x y : A) ? x ? y > >> > >> postulate > >> untrunc : > >> {l : Level} > >> {A : Set l} > >> (_ : isProp A) > >> ? ------------ > >> ? A ? ? A > >> > >> Neither of the postulates propext or untrunc is provable in Agda 2.6, is it? > >> > >> I think they are logically consistent axioms. But is there a better way > >> than just postulating them? > >> > >> Andy > >> > >> > >> > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > >> > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > From nicolai.kraus at gmail.com Thu May 23 00:04:08 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Thu, 23 May 2019 00:04:08 +0200 Subject: [Agda] Prop in Agda 2.6 In-Reply-To: <7242e97c-5eee-41e3-b7e3-9d2dc3422f03@www.fastmail.com> References: <8ce4e36a-6961-489d-b085-ecbf4e6ee09e@www.fastmail.com> <5C92B632-93DA-4B85-B255-9A364F1F5E4A@cl.cam.ac.uk> <7242e97c-5eee-41e3-b7e3-9d2dc3422f03@www.fastmail.com> Message-ID: Hi Andy and Jon, On Wed, May 22, 2019 at 10:04 PM Jon Sterling wrote: > Indeed, I note that if you have such a REWRITE rule, then you can prove > the following instance of equality reflection: > > M, N : A P : is-prop(A) > ----------------------------------------- > M = N : A > just a small remark: the above "restricted equality reflection" already implies full equality reflection, i.e. for m,n: A and p : Id(m,n), one gets m=n (definitionally). This is because one can always consider the type ?(x: A).Id(m,x), for which the rules gives (m,refl) = (n,p), and thus m = n. (It has been discussed before that, because of this, equality reflection for contractible types is inconsistent in HoTT.) Nicolai -------------- next part -------------- An HTML attachment was scrubbed... URL: From jon at jonmsterling.com Thu May 23 00:41:14 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Wed, 22 May 2019 18:41:14 -0400 Subject: [Agda] Prop in Agda 2.6 In-Reply-To: References: <8ce4e36a-6961-489d-b085-ecbf4e6ee09e@www.fastmail.com> <5C92B632-93DA-4B85-B255-9A364F1F5E4A@cl.cam.ac.uk> <7242e97c-5eee-41e3-b7e3-9d2dc3422f03@www.fastmail.com> Message-ID: <15c3946d-f365-4dc8-aebf-d62adf179259@www.fastmail.com> Hi Nicolai, thank you for this very insightful message! Best, Jon On Wed, May 22, 2019, at 6:04 PM, Nicolai Kraus wrote: > Hi Andy and Jon, > > On Wed, May 22, 2019 at 10:04 PM Jon Sterling wrote: > > Indeed, I note that if you have such a REWRITE rule, then you can prove the following instance of equality reflection: > > > > M, N : A P : is-prop(A) > > ----------------------------------------- > > M = N : A > > just a small remark: the above "restricted equality reflection" already > implies full equality reflection, i.e. for m,n: A and p : Id(m,n), one > gets m=n (definitionally). This is because one can always consider the > type ?(x: A).Id(m,x), for which the rules gives (m,refl) = (n,p), and > thus m = n. > (It has been discussed before that, because of this, equality > reflection for contractible types is inconsistent in HoTT.) > Nicolai > From apostolis.xekoukoulotakis at gmail.com Thu May 23 01:22:54 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Thu, 23 May 2019 02:22:54 +0300 Subject: [Agda] Platform Independent proofs. Message-ID: I was trying to support floats in agda-ocaml when I realized that this is a lost cause and a very dangerous one. If I didn't match the exact computational results of haskell, then I could get proofs that typechecked in agda that were completely wrong in OCaml. But there is also a theoretical error in all of this. Right now, we do not have universal proofs like in Mathematics. We have platform dependent proofs. In other words, we should write explicitly that this proof is correct for this specific version of the CPU, this specific version of haskell etc. Is it the job of agda to check whether two hardware or software versions have the same computational results? Of course not. In my opinion, all platform dependent computations should be inserted as postulates. This way, agda will do exactly what it was programmed to do. And we can still prove things for postulates. ``` open import Common.Integer open import Agda.Builtin.Equality postulate Float : Set d : Float round : Float ? Integer f : round d ? round d f = refl ``` -------------- next part -------------- An HTML attachment was scrubbed... URL: From philipp.hausmann at 314.ch Thu May 23 08:42:47 2019 From: philipp.hausmann at 314.ch (Philipp Hausmann) Date: Thu, 23 May 2019 08:42:47 +0200 Subject: [Agda] Platform Independent proofs. In-Reply-To: References: Message-ID: <669f3056-acb1-d159-f1af-7219cc07de33@314.ch> Hi You are right in so far as the floating point primitives implementation needs to exactly match the Haskell implementation used by Agda. Do you have a concrete example where this poses a problem? There are people taking advantage of the fact that Floats can be reasoned about [1]. I do think that is a valid use case. This would no longer work if Floats were postulates. Note that Agda does not stop you from defining your own Float type with postulates. You are also not required to implement the float primitives if there is no reasonable way to support them. I feel my comment from #3749 also applies here: > Is this actually an issue Agda itself needs to solve? Maybe this is a > problem libraries should solve, as it already today is possible to > package the Float implementation in a record and provide different > implementations. Maybe Agda should just provide the single-nan > primitives /for now/ because they are the most portable ones and let > libraries experiment with packaging it up or adding different > implementations? [2] Cheers Philipp [1] https://github.com/agda/agda/issues/2194#issuecomment-251525747 [2] https://github.com/agda/agda/issues/3749#issuecomment-489795629 On 5/23/19 1:22 AM, Apostolis Xekoukoulotakis wrote: > I was trying to support floats in agda-ocaml when I realized that this > is a lost cause and a very dangerous one. > > If I didn't match the exact computational results of haskell, then I > could get proofs that typechecked in agda that were completely wrong > in OCaml. > > But there is also a theoretical error in all of this. Right now, we do > not have universal proofs like in Mathematics. We have platform > dependent proofs. > > In other words, we should write explicitly that this proof is correct > for this specific version of the CPU, this specific version of haskell > etc. > > Is it the job of agda to check whether two hardware or software > versions have the same computational results? Of course not. > > In my opinion, all platform dependent computations should be inserted > as postulates. This way, agda will do exactly what it was programmed > to do. > > And we can still prove things for postulates. > > ``` > open import Common.Integer > open import Agda.Builtin.Equality > > postulate > ? Float : Set > ? d : Float > ? round : Float ? Integer > > f : round d ? round d > f = refl > ``` > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Fri May 24 05:20:30 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Fri, 24 May 2019 06:20:30 +0300 Subject: [Agda] Platform Independent proofs. In-Reply-To: <669f3056-acb1-d159-f1af-7219cc07de33@314.ch> References: <669f3056-acb1-d159-f1af-7219cc07de33@314.ch> Message-ID: On Thu, May 23, 2019 at 9:42 AM Philipp Hausmann wrote: > Hi > > You are right in so far as the floating point primitives implementation > needs to exactly match the Haskell implementation used by Agda. Do you have > a concrete example where this poses a problem? > > I will try again today to see if I can match haskell's implementation. But this will solve the problem of inconsistency, not the problem that the proofs depend on a specific implementation. > There are people taking advantage of the fact that Floats can be reasoned > about [1]. I do think that is a valid use case. This would no longer work > if Floats were postulates. Note that Agda does not stop you from defining > your own Float type with postulates. You are also not required to implement > the float primitives if there is no reasonable way to support them. > > I agree that they are useful, maybe then find a way to be explicit about the method of their computation. This touches a difficult subject that I haven't made my mind. There are two types of knowledge, knowledge that can be arrived through computation and knowledge that can be arrived through proofs. Agda is a theorem proof assistant, but maybe we need to introduce computational methods during typechecking. examples : 1. Computation of Reals on the CPU instead of the mathematical notion of Real. 2. Tests , model checking. 3. All types of other computational methods , like numerical solutions to differential equations, image processing, neural networks, etc. One could use the result of computational methods into proofs to derive a result. example : Given a surface , one could use computational methods to show that the curvature of the surface is always positive. Then he could inject that knowledge to the mathematical theorem that says that such a surface would be homeomorphic to S^2. In my opinion, there are many practical benefits in doing that, the question is how do we do it? How can we be explicit about the computational techniques we used to derive that proof? And one should be interested in the reusability of the proofs by others. I am currently looking into the Wolfram language to find answers to those questions, but I haven't used it myself. Maybe someone who has could provide an opinion. (As you can see, my answer was actually a question , I do not have a solution.) I feel my comment from #3749 also applies here: > > Is this actually an issue Agda itself needs to solve? Maybe this is a > problem libraries should solve, as it already today is possible to package > the Float implementation in a record and provide different implementations. > Maybe Agda should just provide the single-nan primitives *for now* > because they are the most portable ones and let libraries experiment with > packaging it up or adding different implementations? [2] > > > Cheers > Philipp > > [1] https://github.com/agda/agda/issues/2194#issuecomment-251525747 > [2] https://github.com/agda/agda/issues/3749#issuecomment-489795629 > > > On 5/23/19 1:22 AM, Apostolis Xekoukoulotakis wrote: > > I was trying to support floats in agda-ocaml when I realized that this is > a lost cause and a very dangerous one. > > If I didn't match the exact computational results of haskell, then I could > get proofs that typechecked in agda that were completely wrong in OCaml. > > But there is also a theoretical error in all of this. Right now, we do not > have universal proofs like in Mathematics. We have platform dependent > proofs. > > In other words, we should write explicitly that this proof is correct for > this specific version of the CPU, this specific version of haskell etc. > > Is it the job of agda to check whether two hardware or software versions > have the same computational results? Of course not. > > In my opinion, all platform dependent computations should be inserted as > postulates. This way, agda will do exactly what it was programmed to do. > > And we can still prove things for postulates. > > ``` > open import Common.Integer > open import Agda.Builtin.Equality > > postulate > Float : Set > d : Float > round : Float ? Integer > > f : round d ? round d > f = refl > ``` > > _______________________________________________ > Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From scm at iis.sinica.edu.tw Fri May 24 05:49:42 2019 From: scm at iis.sinica.edu.tw (Shin-Cheng Mu) Date: Fri, 24 May 2019 11:49:42 +0800 Subject: [Agda] APLAS 2019 Call for Papers Message-ID: <984FDEB3-E801-4F69-91FB-48AF793CF686@iis.sinica.edu.tw> CALL FOR PAPERS The 17th Asian Symposium on Programming Languages and Systems (APLAS19) aims to stimulate programming language research by providing a forum for the presentation of the latest results and the exchange of ideas in programming languages and systems. APLAS is based in Asia but is an international forum that serves the worldwide programming languages community. APLAS 2019 will be held in Bali, Indonesia on 2 - 4 December 2019. CALL FOR REGULAR RESEARCH PAPERS We solicit submissions in the form of regular research papers describing original scientific research results, including system development and case studies. Regular research papers should not exceed 18 pages in the Springer LNCS format, including bibliography and figures. This category encompasses both theoretical and implementation (also known as system descriptions) papers. In either case, submissions should clearly identify what has been accomplished and why it is significant. Submissions will be judged on the basis of significance, relevance, correctness, originality, and clarity. System descriptions papers should contain a link to a working system and will be judged on originality, usefulness, and design. In case of lack of space, proofs, experimental results, or any information supporting the technical results of the paper could be provided as an appendix or a link to a web page, but reviewers are not obliged to read them. CALL FOR TOOL PAPERS We solicit submissions in the form of tool papers describing a demonstration of a tool or a system that support theory, program construction, reasoning, or program execution in the scope of APLAS. The main purpose of a tool paper is to display a completed, robust and well-documented tool-highlighting the overall functionality of the tool, the interfaces of the tool, interesting examples and applications of the tool, an assessment of the tool?s strengths and weaknesses, and a summary of documentation/support available with the tool. Authors of tool demonstration proposals are expected to present a live demonstration of the tool at the conference. It is highly desirable that the tools are available on the web. System and Tool papers should not exceed 8 pages in the Springer LNCS format, including bibliography and figures. They may include an additional appendix of up to 6 extra pages giving the outline, screenshots, examples, etc. to indicate the content of the proposed live demo. SUBMISSION INFORMATION Papers should be submitted electronically via the submission web page using EasyChair (https://easychair.org/my/conference?conf=aplas19). The acceptable format is PDF. Submitted papers must be unpublished and not submitted for publication elsewhere. Papers must be written in English. The proceedings will be published as a volume in Springer?s LNCS series. Accepted papers must be presented at the conference. REVIEW PROCESS APLAS 2019 will use a lightweight double-blind reviewing process. Following this process means that reviewers will not see the authors? names or affiliations as they initially review a paper. The authors? names will then be revealed to the reviewers only once their reviews have been submitted. To facilitate this process, submitted papers must adhere to the following: Author names and institutions must be omitted and References to the authors? own related work should be in the third person (e.g., not ?We build on our previous work ?? but rather ?We build on the work of ??). The purpose of this process is to help the reviewers come to an initial judgement about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission, makes the job of reviewing the paper more difficult, or interferes with the process of disseminating new ideas. For example, important background references should not be omitted or anonymized, even if they are written by the same authors and share common ideas, techniques, or infrastructure. Authors should feel free to disseminate their ideas or draft versions of their paper as they normally would. For instance, authors may post drafts of their papers on the web or give talks on their research ideas. AUTHOR RESPONSE PERIOD During the author response period, authors will be able to read reviews and respond to them as appropriate. RESEARCH INTEGRITY The Program Committee reserves the right, up until the time of publication, to reverse a decision of paper acceptance. Reversal is possible if fatal flaws are discovered in the paper, or research integrity is found to have been seriously breached. ABOUT BALI Quoting from the Lonely Planet web site: ?The mere mention of Bali evokes thoughts of a paradise. It's more than a place; it's a mood, an aspiration, a tropical state of mind.?. https://www.lonelyplanet.com/indonesia/bali From guillaume.brunerie at gmail.com Fri May 24 07:39:43 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Fri, 24 May 2019 07:39:43 +0200 Subject: [Agda] Platform Independent proofs. In-Reply-To: References: <669f3056-acb1-d159-f1af-7219cc07de33@314.ch> Message-ID: I think too that it?s not a good idea that the type checker rely on platform-dependent floating point computations to assess the well-typedness of some term. By default, floats should simply behave as postulates as they have essentially no useful algebraic properties. Of course, when compiling to Haskell/Javascript, then they should extract to floats that compute (and then maybe it doesn?t really matter if the two implementations are slightly different). For the use case given above, maybe there could simply be a flag that would enable floating point computations by the type checker? But I think it should be off by default. Best, Guillaume Den fre 24 maj 2019 kl 05:20 skrev Apostolis Xekoukoulotakis : > > > > On Thu, May 23, 2019 at 9:42 AM Philipp Hausmann wrote: >> >> Hi >> >> You are right in so far as the floating point primitives implementation needs to exactly match the Haskell implementation used by Agda. Do you have a concrete example where this poses a problem? >> > I will try again today to see if I can match haskell's implementation. But this will solve the problem of inconsistency, not the problem that the proofs depend on a specific implementation. > >> >> There are people taking advantage of the fact that Floats can be reasoned about [1]. I do think that is a valid use case. This would no longer work if Floats were postulates. Note that Agda does not stop you from defining your own Float type with postulates. You are also not required to implement the float primitives if there is no reasonable way to support them. >> > > I agree that they are useful, maybe then find a way to be explicit about the method of their computation. > This touches a difficult subject that I haven't made my mind. > > There are two types of knowledge, knowledge that can be arrived through computation and knowledge that can be arrived through proofs. > Agda is a theorem proof assistant, but maybe we need to introduce computational methods during typechecking. > > examples : > 1. Computation of Reals on the CPU instead of the mathematical notion of Real. > 2. Tests , model checking. > 3. All types of other computational methods , like numerical solutions to differential equations, image processing, neural networks, etc. > > One could use the result of computational methods into proofs to derive a result. > > example : Given a surface , one could use computational methods to show that the curvature of the surface is always positive. Then he could inject that knowledge > to the mathematical theorem that says that such a surface would be homeomorphic to S^2. > > In my opinion, there are many practical benefits in doing that, the question is how do we do it? How can we be explicit about the computational techniques we used to derive that proof? > And one should be interested in the reusability of the proofs by others. > > I am currently looking into the Wolfram language to find answers to those questions, but I haven't used it myself. Maybe someone who has could provide an opinion. > > (As you can see, my answer was actually a question , I do not have a solution.) > >> I feel my comment from #3749 also applies here: >> >> Is this actually an issue Agda itself needs to solve? Maybe this is a problem libraries should solve, as it already today is possible to package the Float implementation in a record and provide different implementations. Maybe Agda should just provide the single-nan primitives for now because they are the most portable ones and let libraries experiment with packaging it up or adding different implementations? [2] >> >> >> Cheers >> Philipp >> >> [1] https://github.com/agda/agda/issues/2194#issuecomment-251525747 >> [2] https://github.com/agda/agda/issues/3749#issuecomment-489795629 >> >> >> On 5/23/19 1:22 AM, Apostolis Xekoukoulotakis wrote: >> >> I was trying to support floats in agda-ocaml when I realized that this is a lost cause and a very dangerous one. >> >> If I didn't match the exact computational results of haskell, then I could get proofs that typechecked in agda that were completely wrong in OCaml. >> >> But there is also a theoretical error in all of this. Right now, we do not have universal proofs like in Mathematics. We have platform dependent proofs. >> >> In other words, we should write explicitly that this proof is correct for this specific version of the CPU, this specific version of haskell etc. >> >> Is it the job of agda to check whether two hardware or software versions have the same computational results? Of course not. >> >> In my opinion, all platform dependent computations should be inserted as postulates. This way, agda will do exactly what it was programmed to do. >> >> And we can still prove things for postulates. >> >> ``` >> open import Common.Integer >> open import Agda.Builtin.Equality >> >> postulate >> Float : Set >> d : Float >> round : Float ? Integer >> >> f : round d ? round d >> f = refl >> ``` >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From Thorsten.Altenkirch at nottingham.ac.uk Fri May 24 09:37:26 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Fri, 24 May 2019 07:37:26 +0000 Subject: [Agda] problem installing agda (template Haskell ?) In-Reply-To: References: <154D479A-AF2F-422E-88F9-1D591F100775@nottingham.ac.uk>, Message-ID: Yes thank you - I came to the same conclusion and installed a more recent version of ghost and it worked. I was confused because I was using the same version of ghc recently without problems but some changes triggered a reinstall of packages that didn?t compile anymore. Sorry for missing the obvious. Thorsten Sent from my iPhone On 24 May 2019, at 08:34, Liang-Ting Chen > wrote: Hi Thorsten, It seems that there is a bug in GHC 8.0.? hit by the recent commits as there is also another issue on GitHub https://github.com/agda/agda/issues/3792 when Agda is compiled with 8.0.2. I have compiled successfully the latest Agda with GHC 8.6.5 using stack on a macOS 10.14.4. Hope this helps. Best regards, Liang-Ting On Wed, 22 May 2019 at 16:30, Thorsten Altenkirch > wrote: Hi guys, Has anybody encountered a problem installing agda in the moment? Cabal install fails with some error messages to do with template Haskell. First it says Use --force-reinstalls if you want to install anyway. But when I do it it runs into an error Building geniplate-mirror-0.7.6... Preprocessing library geniplate-mirror-0.7.6... [1 of 1] Compiling Data.Generics.Geniplate ( Data/Generics/Geniplate.hs, dist/dist-sandbox-d9c30c4b/build/Data/Generics/Geniplate.o ) Data/Generics/Geniplate.hs:264:33: error: ? Can't find interface-file declaration for type constructor or class Language.Haskell.TH.Lib.ExpQ Probable cause: bug in .hi-boot file, or inconsistent .hi file Use -ddump-if-trace to get an idea of which file caused the error ? I am using sean:agda txa$ ghc --version The Glorious Glasgow Haskell Compilation System, version 8.0.1 on a mac and the latest version of the agda repo. I attach a dump from the terminal. I tried this on 2 different machines. Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -- Best regards, Liang-Ting _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Fri May 24 16:06:45 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Fri, 24 May 2019 14:06:45 +0000 Subject: [Agda] separate definition of constructors? Message-ID: Hi, I am trying to port the definition of Type Theory in Type Theory form our paper Type theory in type theory using quotient inductive types. POPL 2016 to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. data Con : Set data Ty : (? : Con) ? Set data Tm : (? : Con)(A : Ty ?) ? Set data Tms : (? ? : Con) ? Set data Ty where _[_] : Ty ? ? Tms ? ? ? Ty ? data Tms where id : Tms ? ? _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) data Ty where [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition id' : Tms ? ? and then use id? in the equation for Ty and define later id' = id but this is a bit ugly. Would it be possible to allow separate definitions of constructors? Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From kaposi.ambrus at gmail.com Fri May 24 16:16:15 2019 From: kaposi.ambrus at gmail.com (Ambrus Kaposi) Date: Fri, 24 May 2019 16:16:15 +0200 Subject: [Agda] separate definition of constructors? In-Reply-To: References: Message-ID: Hi Thorsten, There is another workaround discovered recently by Szumi Xie: you can reduce any inductive-inductive type to one with only two sorts (using essentially the same technique as reducing mutual inductive types to an indexed inductive type). Then you can specify the constructors all at once. Here is Szumi's implementation of tt-in-tt using cubical: https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda Cheers, Ambrus On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch wrote: > > Hi, > > > > I am trying to port the definition of Type Theory in Type Theory form our paper > > Type theory in type theory using quotient inductive types. POPL 2016 > > to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). > > > > However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. > > > > data Con : Set > > data Ty : (? : Con) ? Set > > data Tm : (? : Con)(A : Ty ?) ? Set > > data Tms : (? ? : Con) ? Set > > > > data Ty where > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > data Tms where > > id : Tms ? ? > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > data Ty where > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! > > > > This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition > > > > id' : Tms ? ? > > > > and then use id? in the equation for Ty and define later > > > > id' = id > > > > but this is a bit ugly. Would it be possible to allow separate definitions of constructors? > > > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > From jon at jonmsterling.com Fri May 24 18:58:13 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Fri, 24 May 2019 12:58:13 -0400 Subject: [Agda] separate definition of constructors? In-Reply-To: References: Message-ID: <58c9114c-4a20-40f0-8ca0-8ad3059cc30f@www.fastmail.com> Wow this is really cool, thanks for sharing Ambrus! I tried to experiment with something like this but got kind of owned in the process. Best, Jon On Fri, May 24, 2019, at 10:16 AM, Ambrus Kaposi wrote: > Hi Thorsten, > > There is another workaround discovered recently by Szumi Xie: you can > reduce any inductive-inductive type to one with only two sorts (using > essentially the same technique as reducing mutual inductive types to > an indexed inductive type). Then you can specify the constructors all > at once. Here is Szumi's implementation of tt-in-tt using cubical: > https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda > > Cheers, > Ambrus > > On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch > wrote: > > > > Hi, > > > > > > > > I am trying to port the definition of Type Theory in Type Theory form our paper > > > > Type theory in type theory using quotient inductive types. POPL 2016 > > > > to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). > > > > > > > > However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. > > > > > > > > data Con : Set > > > > data Ty : (? : Con) ? Set > > > > data Tm : (? : Con)(A : Ty ?) ? Set > > > > data Tms : (? ? : Con) ? Set > > > > > > > > data Ty where > > > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > > > > > data Tms where > > > > id : Tms ? ? > > > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > > > > > data Ty where > > > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > > > > > The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! > > > > > > > > This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition > > > > > > > > id' : Tms ? ? > > > > > > > > and then use id? in the equation for Ty and define later > > > > > > > > id' = id > > > > > > > > but this is a bit ugly. Would it be possible to allow separate definitions of constructors? > > > > > > > > Thorsten > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From publicityifl at gmail.com Mon May 27 11:02:11 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Mon, 27 May 2019 02:02:11 -0700 Subject: [Agda] Call for papers for IFL 2019 (Implementation and Application of Functional Languages) Message-ID: Hello, Please, find below the call for papers for IFL 2019. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Publicity Chair of IFL --- ================================================================================ IFL 2019 31st Symposium on Implementation and Application of Functional Languages National University of Singapore September 25th-27th, 2019 http://2019.iflconference.org ================================================================================ ### Scope The goal of the IFL symposia is to bring together researchers actively engaged in the implementation and application of functional and function-based programming languages. IFL 2019 will be a venue for researchers to present and discuss new ideas and concepts, work in progress, and publication-ripe results related to the implementation and application of functional languages and function-based programming. Topics of interest to IFL include, but are not limited to: - language concepts - type systems, type checking, type inferencing - compilation techniques - staged compilation - run-time function specialization - run-time code generation - partial evaluation - (abstract) interpretation - metaprogramming - generic programming - automatic program generation - array processing - concurrent/parallel programming - concurrent/parallel program execution - embedded systems - web applications - (embedded) domain specific languages - security - novel memory management techniques - run-time profiling performance measurements - debugging and tracing - virtual/abstract machine architectures - validation, verification of functional programs - tools and programming techniques - (industrial) applications ### Keynote Speaker * Olivier Danvy, Yale-NUS College ### Submissions and peer-review Differently from previous editions of IFL, IFL 2019 solicits two kinds of submissions: * Regular papers (12 pages including references) * Draft papers for presentations ('weak' limit between 8 and 15 pages) Regular papers will undergo a rigorous review by the program committee, and will be evaluated according to their correctness, novelty, originality, relevance, significance, and clarity. A set of regular papers will be conditionally accepted for publication. Authors of conditionally accepted papers will be provided with committee reviews along with a set of mandatory revisions. Regular papers not accepted for publication will be considered as draft papers, at the request of the author. Draft papers will be screened to make sure that they are within the scope of IFL, and will be accepted for presentation or rejected accordingly. Prior to the symposium: Authors of conditionally accepted papers and accepted presentations will submit a pre-proceedings version of their work that will appear in the draft proceedings distributed at the symposium. The draft proceedings does not constitute a formal publication. We require that at least one of the authors present the work at IFL 2019. After the symposium: Authors of conditionally accepted papers will submit a revised versions of their paper for the formal post-proceedings. The program committee will assess whether the mandatory revisions have been adequately addressed by the authors and thereby determines the final accept/reject status of the paper. Our interest is to ultimately accept all conditionally accepted papers. If you are an author of a conditionally accepted paper, please make sure that you address all the concerns of the reviewers. Authors of accepted presentations will be given the opportunity to incorporate the feedback from discussions at the symposium and will be invited to submit a revised full article for the formal post-proceedings. The program committee will evaluate these submissions according to their correctness, novelty, originality, relevance, significance, and clarity, and will thereby determine whether the paper is accepted or rejected. ### Publication The formal proceedings will appear in the International Conference Proceedings Series of the ACM Digital Library. At no time may work submitted to IFL be simultaneously submitted to other venues; submissions must adhere to ACM SIGPLAN's republication policy: http://www.sigplan.org/Resources/Policies/Republication ### Important dates Submission of regular papers: May 31, 2019 Submission of draft papers: July 15, 2019 Regular and draft papers notification: August 1, 2019 Deadline for early registration: August 15, 2019 Submission of pre-proceedings version: September 15, 2019 IFL Symposium: September 25-27, 2019 Submission of papers for post-proceedings: November 30, 2019 Notification of acceptance: January 31, 2020 Camera-ready version: February 29, 2020 ### Submission details All contributions must be written in English. Papers must use the ACM two columns conference format, which can be found at: http://www.acm.org/publications/proceedings-template Authors submit through EasyChair: https://easychair.org/conferences/?conf=ifl2019 ### Peter Landin Prize The Peter Landin Prize is awarded to the best paper presented at the symposium every year. The honored article is selected by the program committee based on the submissions received for the formal review process. The prize carries a cash award equivalent to 150 Euros. ### Organization and Program committee Chairs: Jurrien Stutterheim (Standard Chartered Bank Singapore), Wei Ngan Chin (National University of Singapore) Program Committee: - Olaf Chitil, University of Kent - Clemens Grelck, University of Amsterdam - Daisuke Kimura, Toho University - Pieter Koopman, Radboud University - Tamas Kozsik, Eotvos Lorand University - Roman Leschinskiy, Facebook - Ben Lippmeier, The University of New South Wales - Marco T. Morazan, Seton Hall University - Sven-Bodo Scholz, Heriot-Watt University - Tom Schrijvers, Katholieke Universiteit Leuven - Alejandro Serrano, Utrecht University - Tony Sloane, Macquarie University - Simon Thompson, University of Kent - Marcos Viera, Universidad de la Republica - Wei Ngan Chin, NUS - Jurrien Stutterheim, Standard Chartered Bank ### Venue The 31st IFL is organized by the National University of Singapore. Singapore is located in the heart of South-East Asia, and the city itself is extremely well connected by trains and taxis. See the website for more information on the venue. ### Acknowledgments This call-for-papers is an adaptation and evolution of content from previous instances of IFL. We are grateful to prior organizers for their work, which is reused here. A part of IFL 2019 format and CFP language that describes conditionally accepted papers has been adapted from call-for-papers of OOPSLA conferences. -------------- next part -------------- An HTML attachment was scrubbed... URL: From carette at mcmaster.ca Mon May 27 18:28:10 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Mon, 27 May 2019 12:28:10 -0400 Subject: [Agda] github.com/agda Message-ID: <37a1aa57-ddde-2c69-0d33-837416570867@mcmaster.ca> Who should I talk to about getting a project (in this case, likely agda-categories) listed there? The fork of copumpkin/categories (aka agda/categories) is quite broken in 2.6. Plus a lot of that code pre-dates many useful features, so Jason Hu and I (and we welcome others) would like to redo it in on top of recent Agda (and agda-stdlib). The aim would be to migrate parts of this new version, once the dust settles, into the standard library. Jacques From mechvel at botik.ru Mon May 27 20:24:58 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Mon, 27 May 2019 21:24:58 +0300 Subject: [Agda] reasoning combinator names Message-ID: <1558981498.2305.17.camel@one.mechvel.pereslavl.ru> People, I have Foo.agda where it is needed reasoning by combinators of standard-library-master for _?_ and _?_ for different types, as follows. * reasoning with _?_ on ? and FooData, * reasoning with _?_ on ?. I usually agree such reasonings by renaming some of the reasoning combinators. But this time such renaming is forbidden. What reasoning modules to import, what to substitute? Thanks, ------ Sergei From ulf.norell at gmail.com Mon May 27 21:22:15 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Mon, 27 May 2019 21:22:15 +0200 Subject: [Agda] github.com/agda In-Reply-To: <37a1aa57-ddde-2c69-0d33-837416570867@mcmaster.ca> References: <37a1aa57-ddde-2c69-0d33-837416570867@mcmaster.ca> Message-ID: I've invited you to the Agda github group, which should give you the rights to create the repository. / Ulf On Mon, May 27, 2019 at 6:28 PM Jacques Carette wrote: > Who should I talk to about getting a project (in this case, likely > agda-categories) listed there? > > The fork of copumpkin/categories (aka agda/categories) is quite broken > in 2.6. Plus a lot of that code pre-dates many useful features, so Jason > Hu and I (and we welcome others) would like to redo it in on top of > recent Agda (and agda-stdlib). The aim would be to migrate parts of this > new version, once the dust settles, into the standard library. > > Jacques > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.allais at ens-lyon.org Tue May 28 10:09:49 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 28 May 2019 09:09:49 +0100 Subject: [Agda] reasoning combinator names In-Reply-To: <1558981498.2305.17.camel@one.mechvel.pereslavl.ru> References: <1558981498.2305.17.camel@one.mechvel.pereslavl.ru> Message-ID: Hi Sergei, What we usually do in the standard library is to only open the module for equational reasoning locally to the definition which needs it. This way users can quickly see which reasoning toolkit is being used. You can see this in action in e.g. Data.Integer.DivMod where we have both: ===================================================================== foo m n p = begin (...) ? where open ?-Reasoning ===================================================================== and ===================================================================== bar x y = begin (...) ? where open ?-Reasoning ===================================================================== Best, -- gallais On 27/05/2019 19:24, Sergei Meshveliani wrote: > People, > > I have Foo.agda where it is needed reasoning by combinators of > standard-library-master for _?_ and _?_ for different types, as follows. > > * reasoning with _?_ on ? and FooData, > * reasoning with _?_ on ?. > > I usually agree such reasonings by renaming some of the reasoning > combinators. > But this time such renaming is forbidden. > What reasoning modules to import, what to substitute? > > Thanks, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From mechvel at botik.ru Tue May 28 11:38:58 2019 From: mechvel at botik.ru (Sergei Meshveliani) Date: Tue, 28 May 2019 12:38:58 +0300 Subject: [Agda] reasoning combinator names In-Reply-To: References: <1558981498.2305.17.camel@one.mechvel.pereslavl.ru> Message-ID: <1559036338.2759.2.camel@one.mechvel.pereslavl.ru> On Tue, 2019-05-28 at 09:09 +0100, Guillaume Allais wrote: > Hi Sergei, > > What we usually do in the standard library is to only open the module > for equational reasoning locally to the definition which needs it. > This way users can quickly see which reasoning toolkit is being used. > > You can see this in action in e.g. Data.Integer.DivMod where we have > both: > > ===================================================================== > foo m n p = begin > (...) > ? where open ?-Reasoning > ===================================================================== > > and > > ===================================================================== > bar x y = begin > (...) > ? where open ?-Reasoning > ===================================================================== Thank you! I have forgotten of this possibility. ------ Sergei > -- > gallais > > On 27/05/2019 19:24, Sergei Meshveliani wrote: > > People, > > > > I have Foo.agda where it is needed reasoning by combinators of > > standard-library-master for _?_ and _?_ for different types, as follows. > > > > * reasoning with _?_ on ? and FooData, > > * reasoning with _?_ on ?. > > > > I usually agree such reasonings by renaming some of the reasoning > > combinators. > > But this time such renaming is forbidden. > > What reasoning modules to import, what to substitute? > > > > Thanks, > > > > ------ > > Sergei > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > From nad at cse.gu.se Tue May 28 15:41:05 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Tue, 28 May 2019 15:41:05 +0200 Subject: [Agda] separate definition of constructors? In-Reply-To: References: Message-ID: <1b5d7ae8-80a8-0995-85f6-d89488f3d4c2@cse.gu.se> On 24/05/2019 16.16, Ambrus Kaposi wrote: > There is another workaround discovered recently by Szumi Xie: you can > reduce any inductive-inductive type to one with only two sorts (using > essentially the same technique as reducing mutual inductive types to > an indexed inductive type). Then you can specify the constructors all > at once. I think I saw Conor McBride do something like this a long time ago (in a talk in which he mentioned some building that was constructed by building one floor at a time on the ground and then hoisting it up, finishing with the ground floor, or something like that). Thorsten and I used a similar technique in previous work: http://www.cse.chalmers.se/~nad/publications/altenkirch-danielsson-kraus-partiality/Partiality-monad.Inductive.Preliminary-sketch.html -- /NAD From effectfully at gmail.com Tue May 28 15:55:40 2019 From: effectfully at gmail.com (Roman) Date: Tue, 28 May 2019 16:55:40 +0300 Subject: [Agda] separate definition of constructors? In-Reply-To: <1b5d7ae8-80a8-0995-85f6-d89488f3d4c2@cse.gu.se> References: <1b5d7ae8-80a8-0995-85f6-d89488f3d4c2@cse.gu.se> Message-ID: > I think I saw Conor McBride do something like this a long time ago (in a > talk in which he mentioned some building that was constructed by > building one floor at a time on the ground and then hoisting it up, > finishing with the ground floor, or something like that) Here is a reference: https://pigworker.wordpress.com/2015/01/09/universe-hierarchies/ A quote: > What would I do? I?d think about the Central Bank of Ireland, a magnificent work of performance > architecture by the late Sam Stephenson. The building was constructed around a pair of > reinforced concrete lift shafts. Working at ground level, they built one floor of the building, and > then they winched it up to the top of the lift shafts and pinned it into place. The building > appeared to be growing downward from the Dublin sky. At each step, they did the construction > at the lowest level possible, then shifted it to where they needed it. From Thorsten.Altenkirch at nottingham.ac.uk Thu May 30 12:29:01 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Thu, 30 May 2019 10:29:01 +0000 Subject: [Agda] separate definition of constructors? In-Reply-To: References: Message-ID: Thank you - this is a nice hack. It does solve my problem but the question remains why this hack should be necessary. We should be able to declare the constructors for a collection of inductive types in any order. Would this be difficult to achieve? Thorsten ?On 24/05/2019, 17:18, "Kaposi Ambrus" wrote: Hi Thorsten, There is another workaround discovered recently by Szumi Xie: you can reduce any inductive-inductive type to one with only two sorts (using essentially the same technique as reducing mutual inductive types to an indexed inductive type). Then you can specify the constructors all at once. Here is Szumi's implementation of tt-in-tt using cubical: https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda Cheers, Ambrus On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch wrote: > > Hi, > > > > I am trying to port the definition of Type Theory in Type Theory form our paper > > Type theory in type theory using quotient inductive types. POPL 2016 > > to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). > > > > However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. > > > > data Con : Set > > data Ty : (? : Con) ? Set > > data Tm : (? : Con)(A : Ty ?) ? Set > > data Tms : (? ? : Con) ? Set > > > > data Ty where > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > data Tms where > > id : Tms ? ? > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > data Ty where > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! > > > > This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition > > > > id' : Tms ? ? > > > > and then use id? in the equation for Ty and define later > > > > id' = id > > > > but this is a bit ugly. Would it be possible to allow separate definitions of constructors? > > > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From guillaume.allais at ens-lyon.org Thu May 30 12:39:05 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Thu, 30 May 2019 11:39:05 +0100 Subject: [Agda] separate definition of constructors? In-Reply-To: References: Message-ID: Hi Thorsten, The ability to interleave various definitions like we typically do in papers is something we would like to have. However there are some technical challenges related to the way mutual blocks are currently detected. Cf. https://github.com/agda/agda/issues/2858 Cheers, -- gallais On 30/05/2019 11:29, Thorsten Altenkirch wrote: > Thank you - this is a nice hack. > > It does solve my problem but the question remains why this hack should be necessary. We should be able to declare the constructors for a collection of inductive types in any order. Would this be difficult to achieve? > > Thorsten > > ?On 24/05/2019, 17:18, "Kaposi Ambrus" wrote: > > Hi Thorsten, > > There is another workaround discovered recently by Szumi Xie: you can > reduce any inductive-inductive type to one with only two sorts (using > essentially the same technique as reducing mutual inductive types to > an indexed inductive type). Then you can specify the constructors all > at once. Here is Szumi's implementation of tt-in-tt using cubical: > https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda > > Cheers, > Ambrus > > > > On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch > wrote: > > > > Hi, > > > > > > > > I am trying to port the definition of Type Theory in Type Theory form our paper > > > > Type theory in type theory using quotient inductive types. POPL 2016 > > > > to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). > > > > > > > > However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. > > > > > > > > data Con : Set > > > > data Ty : (? : Con) ? Set > > > > data Tm : (? : Con)(A : Ty ?) ? Set > > > > data Tms : (? ? : Con) ? Set > > > > > > > > data Ty where > > > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > > > > > data Tms where > > > > id : Tms ? ? > > > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > > > > > data Ty where > > > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > > > > > The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! > > > > > > > > This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition > > > > > > > > id' : Tms ? ? > > > > > > > > and then use id? in the equation for Ty and define later > > > > > > > > id' = id > > > > > > > > but this is a bit ugly. Would it be possible to allow separate definitions of constructors? > > > > > > > > Thorsten > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From Thorsten.Altenkirch at nottingham.ac.uk Thu May 30 14:17:26 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Thu, 30 May 2019 12:17:26 +0000 Subject: [Agda] separate definition of constructors? In-Reply-To: References: Message-ID: <71F8DCC0-05CE-48D7-AB79-E8ED0921027B@exmail.nottingham.ac.uk> Yes something like the constructor keyword could work (it needs to include a list of parameters, though). This would be a compatible change (you could still use the old syntax). What exactly would be the problem (apart from implementing it). Once you use QIITs in anger this is going to happen all the time. Thorsten ?On 30/05/2019, 11:39, "Agda on behalf of Guillaume Allais" wrote: Hi Thorsten, The ability to interleave various definitions like we typically do in papers is something we would like to have. However there are some technical challenges related to the way mutual blocks are currently detected. Cf. https://github.com/agda/agda/issues/2858 Cheers, -- gallais On 30/05/2019 11:29, Thorsten Altenkirch wrote: > Thank you - this is a nice hack. > > It does solve my problem but the question remains why this hack should be necessary. We should be able to declare the constructors for a collection of inductive types in any order. Would this be difficult to achieve? > > Thorsten > > On 24/05/2019, 17:18, "Kaposi Ambrus" wrote: > > Hi Thorsten, > > There is another workaround discovered recently by Szumi Xie: you can > reduce any inductive-inductive type to one with only two sorts (using > essentially the same technique as reducing mutual inductive types to > an indexed inductive type). Then you can specify the constructors all > at once. Here is Szumi's implementation of tt-in-tt using cubical: > https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda > > Cheers, > Ambrus > > > > On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch > wrote: > > > > Hi, > > > > > > > > I am trying to port the definition of Type Theory in Type Theory form our paper > > > > Type theory in type theory using quotient inductive types. POPL 2016 > > > > to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). > > > > > > > > However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. > > > > > > > > data Con : Set > > > > data Ty : (? : Con) ? Set > > > > data Tm : (? : Con)(A : Ty ?) ? Set > > > > data Tms : (? ? : Con) ? Set > > > > > > > > data Ty where > > > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > > > > > data Tms where > > > > id : Tms ? ? > > > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > > > > > data Ty where > > > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > > > > > The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! > > > > > > > > This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition > > > > > > > > id' : Tms ? ? > > > > > > > > and then use id? in the equation for Ty and define later > > > > > > > > id' = id > > > > > > > > but this is a bit ugly. Would it be possible to allow separate definitions of constructors? > > > > > > > > Thorsten > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From liang.ting.chen.tw at gmail.com Thu May 30 14:41:49 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Thu, 30 May 2019 13:41:49 +0100 Subject: [Agda] extendContext in reflection Message-ID: Hi all, I found that the de Bruijn indices in the context extended by `extendContext` does not corresponds to the right position in the context. For example, in the following metaprogram, the indices of the argument `a` and the argument in the extended context are both `0` as executing `? x ? test x` shows `0 0`. Shouldn't the index for `a` be 1? macro test : ? ? Term ? TC ? test a _ = do extendContext (vArg (quoteTerm ?)) do (var? i , var? j) ? ? (quoteTC =<< unquoteTC {A = ?} (var? 0)) , quoteTC a ? where _ ? {!!} typeError (strErr (show i) ? (strErr (show j)) ? []) -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From liang.ting.chen.tw at gmail.com Thu May 30 15:58:54 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Thu, 30 May 2019 14:58:54 +0100 Subject: [Agda] extendContext in reflection In-Reply-To: References: Message-ID: Oops, there are surprisingly many typos in my previous email. Hope it is still understandable. Anyway, I forgot to mention that the above code is tested with the development version of Agda on GitHub. -- Liang-Ting On Thu, 30 May 2019 at 13:41, Liang-Ting Chen wrote: > Hi all, > > I found that the de Bruijn indices in the context extended by > `extendContext` does not corresponds to the right position in the context. > For example, in the following metaprogram, the indices of the argument `a` > and the argument in the extended context are both `0` as executing `? x ? > test x` shows `0 0`. Shouldn't the index for `a` be 1? > > macro > test : ? ? Term ? TC ? > test a _ = do > extendContext (vArg (quoteTerm ?)) do > (var? i , var? j) ? ? (quoteTC =<< unquoteTC {A = ?} (var? 0)) , > quoteTC a ? > where _ ? {!!} > typeError (strErr (show i) ? (strErr (show j)) ? []) > > > -- > Best regards, > Liang-Ting > -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From jmchapman at gmail.com Fri May 31 20:32:12 2019 From: jmchapman at gmail.com (James Chapman) Date: Fri, 31 May 2019 19:32:12 +0100 Subject: [Agda] separate definition of constructors? In-Reply-To: <71F8DCC0-05CE-48D7-AB79-E8ED0921027B@exmail.nottingham.ac.uk> References: <71F8DCC0-05CE-48D7-AB79-E8ED0921027B@exmail.nottingham.ac.uk> Message-ID: This sounds good. We discussed this at AIM (insert roman numeral) when implementing the declare before use version of mutual definitions but one barrier was thinking of a sensible syntax for isolated constructor declarations. I would like to have complete freedom to interleave constructors and function clauses. Sometimes you need to be able to run one function clause to type check the next clause of the same function etc. I am not sure if the existing setup supports that. James On Thu, 30 May 2019 at 13:17, Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > Yes something like the constructor keyword could work (it needs to include > a list of parameters, though). This would be a compatible change (you > could still use the old syntax). What exactly would be the problem (apart > from implementing it). > > Once you use QIITs in anger this is going to happen all the time. > > Thorsten > > ?On 30/05/2019, 11:39, "Agda on behalf of Guillaume Allais" < > agda-bounces at lists.chalmers.se on behalf of guillaume.allais at ens-lyon.org> > wrote: > > Hi Thorsten, > > The ability to interleave various definitions like we typically do in > papers > is something we would like to have. However there are some technical > challenges > related to the way mutual blocks are currently detected. > > Cf. https://github.com/agda/agda/issues/2858 > > Cheers, > -- > gallais > > On 30/05/2019 11:29, Thorsten Altenkirch wrote: > > Thank you - this is a nice hack. > > > > It does solve my problem but the question remains why this hack > should be necessary. We should be able to declare the constructors for a > collection of inductive types in any order. Would this be difficult to > achieve? > > > > Thorsten > > > > On 24/05/2019, 17:18, "Kaposi Ambrus" wrote: > > > > Hi Thorsten, > > > > There is another workaround discovered recently by Szumi Xie: > you can > > reduce any inductive-inductive type to one with only two sorts > (using > > essentially the same technique as reducing mutual inductive > types to > > an indexed inductive type). Then you can specify the > constructors all > > at once. Here is Szumi's implementation of tt-in-tt using > cubical: > > > https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda > > > > Cheers, > > Ambrus > > > > > > > > On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch > > wrote: > > > > > > Hi, > > > > > > > > > > > > I am trying to port the definition of Type Theory in Type > Theory form our paper > > > > > > Type theory in type theory using quotient inductive types. > POPL 2016 > > > > > > to cubical agda (yes I know inductive families don?t yet work > but Andrea is working on it). > > > > > > > > > > > > However, when we faked this we were able to first introduce > the point constructors and then the equality constructors but when doing > this in cubical agda all the constructors have to appear together. This > leads to the old problem that you have to create forward references for > contructors which is a bit ugly. E.g. > > > > > > > > > > > > data Con : Set > > > > > > data Ty : (? : Con) ? Set > > > > > > data Tm : (? : Con)(A : Ty ?) ? Set > > > > > > data Tms : (? ? : Con) ? Set > > > > > > > > > > > > data Ty where > > > > > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > > > > > > > > > data Tms where > > > > > > id : Tms ? ? > > > > > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > > > > > > > > > data Ty where > > > > > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > > > > > > > > > The problem is that Tms uses _[_] hence I have to declare the > point constructors for Ty first, but then the equality for Ty refers to id! > > > > > > > > > > > > This is an old issue (already with inductive-inductive > definitions) but it gets worse once we have QIITs. There is a workaround to > define a forward definition > > > > > > > > > > > > id' : Tms ? ? > > > > > > > > > > > > and then use id? in the equation for Ty and define later > > > > > > > > > > > > id' = id > > > > > > > > > > > > but this is a bit ugly. Would it be possible to allow separate > definitions of constructors? > > > > > > > > > > > > Thorsten > > > > > > This message and any attachment are intended solely for the > addressee > > > and may contain confidential information. If you have received > this > > > message in error, please contact the sender and delete the > email and > > > attachment. > > > > > > Any views or opinions expressed by the author of this email do > not > > > necessarily reflect the views of the University of Nottingham. > Email > > > communications with the University of Nottingham may be > monitored > > > where permitted by law. > > > > > > > > > > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From xu at math.lmu.de Sat Jun 1 00:28:16 2019 From: xu at math.lmu.de (Chuangjie Xu) Date: Sat, 01 Jun 2019 00:28:16 +0200 Subject: [Agda] Agda Implementors' Meeting XXX - Munich, 11-17 September 2019 Message-ID: <20190601002816.13191qo2dzzydri8@webmail.mathematik.uni-muenchen.de> --------------------------------------------------------------- Agda Implementors' Meeting XXX Call for participation http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.AIMXXX --------------------------------------------------------------- The thirtieth Agda Implementors' Meeting will take place in Munich, Germany from Wednesday 11 September 2019 to Tuesday 17 September 2019. The meeting will be similar to previous ones: * Presentations concerning theory, implementation, and use cases of Agda and other Agda-like languages. * Discussions around issues related to the Agda language. * Plenty of time to work in, on, under or around Agda, in collaboration with other participants. To register for AIM XXX, please fill out the form below and send it to Chuangjie Xu . Preliminary information (more appearing later) is available at http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.AIMXXX Please spread the word about this meeting. Best regards, Chuangjie -------8<------------------------------------------------------- Registration form for Agda Implementors' Meeting XXX Name: Title and optionally abstract (if you want to give a talk or lead a discussion): Suggestions for code sprints (optional): Additional comments: ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. From jon at jonmsterling.com Sat Jun 1 01:49:51 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Fri, 31 May 2019 19:49:51 -0400 Subject: [Agda] separate definition of constructors? In-Reply-To: References: <71F8DCC0-05CE-48D7-AB79-E8ED0921027B@exmail.nottingham.ac.uk> Message-ID: <563b23c8-b753-44de-a63a-528c2dfaa5d3@www.fastmail.com> That'd be really useful to me!! Best, Jon On Fri, May 31, 2019, at 2:32 PM, James Chapman wrote: > This sounds good. We discussed this at AIM (insert roman numeral) when > implementing the declare before use version of mutual definitions but > one barrier was thinking of a sensible syntax for isolated constructor > declarations. > > I would like to have complete freedom to interleave constructors and > function clauses. > > Sometimes you need to be able to run one function clause to type check > the next clause of the same function etc. I am not sure if the existing > setup supports that. > > James > > On Thu, 30 May 2019 at 13:17, Thorsten Altenkirch > wrote: > > Yes something like the constructor keyword could work (it needs to include a list of parameters, though). This would be a compatible change (you could still use the old syntax). What exactly would be the problem (apart from implementing it). > > > > Once you use QIITs in anger this is going to happen all the time. > > > > Thorsten > > > > On 30/05/2019, 11:39, "Agda on behalf of Guillaume Allais" wrote: > > > > Hi Thorsten, > > > > The ability to interleave various definitions like we typically do in papers > > is something we would like to have. However there are some technical challenges > > related to the way mutual blocks are currently detected. > > > > Cf. https://github.com/agda/agda/issues/2858 > > > > Cheers, > > -- > > gallais > > > > On 30/05/2019 11:29, Thorsten Altenkirch wrote: > > > Thank you - this is a nice hack. > > > > > > It does solve my problem but the question remains why this hack should be necessary. We should be able to declare the constructors for a collection of inductive types in any order. Would this be difficult to achieve? > > > > > > Thorsten > > > > > > On 24/05/2019, 17:18, "Kaposi Ambrus" wrote: > > > > > > Hi Thorsten, > > > > > > There is another workaround discovered recently by Szumi Xie: you can > > > reduce any inductive-inductive type to one with only two sorts (using > > > essentially the same technique as reducing mutual inductive types to > > > an indexed inductive type). Then you can specify the constructors all > > > at once. Here is Szumi's implementation of tt-in-tt using cubical: > > > https://bitbucket.org/szumixie/tt-in-tt/src/master/Cubical/Syntax.agda > > > > > > Cheers, > > > Ambrus > > > > > > > > > > > > On Fri, May 24, 2019 at 4:06 PM Thorsten Altenkirch > > > wrote: > > > > > > > > Hi, > > > > > > > > > > > > > > > > I am trying to port the definition of Type Theory in Type Theory form our paper > > > > > > > > Type theory in type theory using quotient inductive types. POPL 2016 > > > > > > > > to cubical agda (yes I know inductive families don?t yet work but Andrea is working on it). > > > > > > > > > > > > > > > > However, when we faked this we were able to first introduce the point constructors and then the equality constructors but when doing this in cubical agda all the constructors have to appear together. This leads to the old problem that you have to create forward references for contructors which is a bit ugly. E.g. > > > > > > > > > > > > > > > > data Con : Set > > > > > > > > data Ty : (? : Con) ? Set > > > > > > > > data Tm : (? : Con)(A : Ty ?) ? Set > > > > > > > > data Tms : (? ? : Con) ? Set > > > > > > > > > > > > > > > > data Ty where > > > > > > > > _[_] : Ty ? ? Tms ? ? ? Ty ? > > > > > > > > > > > > > > > > data Tms where > > > > > > > > id : Tms ? ? > > > > > > > > _,_ : (? : Tms ? ?) ? Tm ? (A [ ? ]) ? Tms ? (? , A) > > > > > > > > > > > > > > > > data Ty where > > > > > > > > [id]T : ?{?}{A : Ty ?} ? A [ id ] ? A > > > > > > > > > > > > > > > > The problem is that Tms uses _[_] hence I have to declare the point constructors for Ty first, but then the equality for Ty refers to id! > > > > > > > > > > > > > > > > This is an old issue (already with inductive-inductive definitions) but it gets worse once we have QIITs. There is a workaround to define a forward definition > > > > > > > > > > > > > > > > id' : Tms ? ? > > > > > > > > > > > > > > > > and then use id? in the equation for Ty and define later > > > > > > > > > > > > > > > > id' = id > > > > > > > > > > > > > > > > but this is a bit ugly. Would it be possible to allow separate definitions of constructors? > > > > > > > > > > > > > > > > Thorsten > > > > > > > > This message and any attachment are intended solely for the addressee > > > > and may contain confidential information. If you have received this > > > > message in error, please contact the sender and delete the email and > > > > attachment. > > > > > > > > Any views or opinions expressed by the author of this email do not > > > > necessarily reflect the views of the University of Nottingham. Email > > > > communications with the University of Nottingham may be monitored > > > > where permitted by law. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > > > and may contain confidential information. If you have received this > > > message in error, please contact the sender and delete the email and > > > attachment. > > > > > > Any views or opinions expressed by the author of this email do not > > > necessarily reflect the views of the University of Nottingham. Email > > > communications with the University of Nottingham may be monitored > > > where permitted by law. > > > > > > > > > > > > > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > > > > > > > > > > > > > This message and any attachment are intended solely for the addressee > > and may contain confidential information. If you have received this > > message in error, please contact the sender and delete the email and > > attachment. > > > > Any views or opinions expressed by the author of this email do not > > necessarily reflect the views of the University of Nottingham. Email > > communications with the University of Nottingham may be monitored > > where permitted by law. > > > > > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From bob.atkey at gmail.com Mon Jun 3 15:25:58 2019 From: bob.atkey at gmail.com (Robert Atkey) Date: Mon, 3 Jun 2019 14:25:58 +0100 Subject: [Agda] 2 PhD studentships, MSP group, University of Strathclyde, UK Message-ID: <786192d4-1ad2-2fc3-eaea-8baadd169f0e@gmail.com> ****************************************************************** *** 2 x PhD Positions *** *** Mathematically Structured Programming Group *** University of Strathclyde *** ****************************************************************** Applications are invited for PhD study on any aspect of functional programming, type theory, logic, category theory, coalgebra etc. Candidates need not have a topic in mind, as we have plenty of ideas! The positions are expected to start on 1 October 2019, is fully funded for UK or EU students and will last for 3 years. The MSP group at the University of Strathclyde contains some marvellous researchers (if we do say so ourselves) and prides itself on its friendly and welcoming atmosphere. Members of the group are Dr Bob Atkey, Dr Ross Duncan, Dr Fredrik Forsberg, Professor Neil Ghani, Dr Clemens Kupke, and Dr Conor McBride. Anyone interested should in the first instance contact Professor Neil Ghani (neil.ghani at strath.ac.uk) and outline their academic background. Applications will be considered on a first come, first served basis. Please distribute to interested parties. From icfp.publicity at googlemail.com Mon Jun 3 18:03:28 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Mon, 03 Jun 2019 12:03:28 -0400 Subject: [Agda] Second Call for Submissions: ICFP Student Research Competition Message-ID: <5cf544d0245a0_78b42ab427c125b889478@homer.mail> ICFP 2019 Student Research Competition Call for Submissions ICFP invites students to participate in the Student Research Competition in order to present their research and get feedback from prominent members of the programming language research community. Please submit your extended abstracts through the submission website. ### Important dates Submissions due: 14 Jun 2019 (Friday) https://icfp19src.hotcrp.com Notification: 28 Jun 2019 (Friday) Conference: 18 August (Sunday) - 23 August (Friday) Each submission (referred to as "abstract" below) should include the student author?s name and e-mail address; institutional affiliation; research advisor?s name; ACM student member number; category (undergraduate or graduate); research title; and an extended abstract addressing the following: * Problem and Motivation: Clearly state the problem being addressed and explain the reasons for seeking a solution to this problem. * Background and Related Work: Describe the specialized (but pertinent) background necessary to appreciate the work in the context of ICFP areas of interest. Include references to the literature where appropriate, and briefly explain where your work departs from that done by others. * Approach and Uniqueness: Describe your approach in addressing the problem and clearly state how your approach is novel. * Results and Contributions: Clearly show how the results of your work contribute to programming language design and implementation in particular and to computer science in general; explain the significance of those results. * Submissions must be original research that is not already published at ICFP or another conference or journal. One of the goals of the SRC is to give students feedback on ongoing, unpublished work. Furthermore, the abstract must be authored solely by the student. If the work is collaborative with others and*or part of a larger group project, the abstract should make clear what the student?s role was and should focus on that portion of the work. * Formatting: Submissions must be in PDF format, printable in black and white on US Letter sized paper, and interpretable by common PDF tools. All submissions must adhere to the "ACM Small" template that is available (in both LaTeX and Word formats) from https://www.acm.org/publications/authors/submissions. For authors using LaTeX, a lighter-weight package, including only the essential files, is available from http://sigplan.org/Resources/Author/#acmart-format. The submission must not exceed 3 pages in PDF format. Reference lists do not count towards the 3-page limit. Further information is available at the ICFP SRC website: https://icfp19.sigplan.org/track/icfp-2019-Student-Research-Competition ICFP Student Research Competition Chair: William J. Bowman (University of British Columbia) From david.janin at labri.fr Tue Jun 4 15:50:21 2019 From: david.janin at labri.fr (david.janin at labri.fr) Date: Tue, 4 Jun 2019 15:50:21 +0200 Subject: [Agda] Type level computation in inductive types Message-ID: <2B9C3338-F77D-499A-B579-C6C1472629EA@labri.fr> Dear all, Could well be a silly question, but I don?t understand why the following definition does not type in Agda: data TypedPath {l} : Set l -> Set l -> Set l where atom : ? {A B : Set l} -> A -> B -> TypedPath A B append : ? {A B C : Set l} -> (A -> C) -> TypedPath C B -> TypedPath A B Instead, it seems that Agda expects data TypedPath {l} : Set l -> Set l -> Set (suc l) where ?. with an increase in type universe level. As far as I eventually manage to make CoQ prints its (more hidden) universe levels, the inductive type Inductive hybridPath : Type -> Type -> Type := const: forall A B : Type, A -> B -> hybridPath A A | comp : forall A B C : Type, hybridPath A C -> hybridPath C B -> hybridPath A B. stays in CoQ within the same level of types?. Any hint welcome, David From Jesper at sikanda.be Tue Jun 4 16:33:21 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 4 Jun 2019 16:33:21 +0200 Subject: [Agda] Type level computation in inductive types In-Reply-To: <2B9C3338-F77D-499A-B579-C6C1472629EA@labri.fr> References: <2B9C3338-F77D-499A-B579-C6C1472629EA@labri.fr> Message-ID: Hi David, The reason why your TypedPath type is rejected is because C (the third implicit argument of append) lives in universe Set l, but unlike A and B it is not forced by the indices of the type of append. If it were accepted, then you would be able to store a value of type Set l in a (relatively) small datatype which lives in Set l itself. Indeed, if this type were allowed we could define a type Set? : Set which is isomorphic to Set itself. ```agda open import Agda.Primitive open import Agda.Builtin.Nat open import Agda.Builtin.Equality open import Agda.Builtin.Unit open import Agda.Builtin.Sigma variable l : Level A B C : Set l data ? : Set where {-# NO_UNIVERSE_CHECK #-} -- disables universe level check locally data TypedPath {l} : Set l -> Set l -> Set l where atom : ? {A B : Set l} -> A -> B -> TypedPath A B append : ? {A B C : Set l} -> (A -> C) -> TypedPath C B -> TypedPath A B data D : TypedPath ? ? ? Set where c : (A : Set) ? D (append {C = A} (? ()) (append (? _ ? tt) (atom tt tt))) Set? : Set Set? = ? (TypedPath ? ?) D box : Set ? Set? box A = _ , c A unbox : Set? ? Set unbox (_ , c A) = A box-unbox : ? X ? box (unbox X) ? X box-unbox (_ , c A) = refl unbox-box : ? A ? unbox (box A) ? A unbox-box A = refl ``` -- Jesper On Tue, Jun 4, 2019 at 3:51 PM wrote: > Dear all, > > Could well be a silly question, but I don?t understand why the following > definition does not type in Agda: > > data TypedPath {l} : Set l -> Set l -> Set l where > atom : ? {A B : Set l} -> A -> B -> TypedPath A B > append : ? {A B C : Set l} -> (A -> C) -> TypedPath C B -> TypedPath A > B > > Instead, it seems that Agda expects > > data TypedPath {l} : Set l -> Set l -> Set (suc l) where > ?. > > with an increase in type universe level. > > > As far as I eventually manage to make CoQ prints its (more hidden) > universe levels, the inductive type > > Inductive hybridPath : Type -> Type -> Type := > const: forall A B : Type, A -> B -> hybridPath A A > | comp : forall A B C : Type, hybridPath A C > -> hybridPath C B -> hybridPath A B. > > stays in CoQ within the same level of types?. > > Any hint welcome, > > David > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From chisvasileandrei at gmail.com Tue Jun 4 17:41:18 2019 From: chisvasileandrei at gmail.com (Andrei Chis) Date: Tue, 4 Jun 2019 17:41:18 +0200 Subject: [Agda] Second Call for Papers: 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019) Message-ID: ------------------------------------------------------------------------ Call for Papers: 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019) co-located with SPLASH 2019 Athens, Greece October 21-22, 2019 https://conf.researchr.org/home/sle-2019 http://www.sleconf.org/2019 Follow us on twitter: https://twitter.com/sleconf ------------------------------------------------------------------------ We are pleased to invite you to submit papers to the 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019), held in conjunction with SPLASH 2019 at Athens, Greece on October 21-22, 2019. --------------------------- Topics of Interest --------------------------- SLE 2019 solicits high-quality contributions in areas ranging from theoretical and conceptual contributions, to tools, techniques, and frameworks in the domain of software language engineering. Topics relevant to SLE cover generic aspects of software languages development rather than aspects of engineering a specific language. In particular, SLE is interested in contributions from the following areas: * Software Language Design and Implementation - Approaches to and methods for language design - Static semantics (e.g., design rules, well-formedness constraints) - Techniques for specifying behavioral / executable semantics - Generative approaches (incl. code synthesis, compilation) - Meta-languages, meta-tools, language workbenches * Software Language Validation - Verification and formal methods for languages - Testing techniques for languages - Simulation techniques for languages * Software Language Integration and Composition - Coordination of heterogeneous languages and tools - Mappings between languages (incl. transformation languages) - Traceability between languages - Deployment of languages to different platforms * Software Language Maintenance - Software language reuse - Language evolution - Language families and variability * Domain-specific approaches for any aspects of SLE (design, implementation, validation, maintenance) * Empirical evaluation and experience reports of language engineering tools - User studies evaluating usability - Performance benchmarks - Industrial applications --------------------------- Important Dates --------------------------- All dates are Anywhere on Earth. * Fri 14 Jun 2019 - Abstract Submission * Fri 21 Jun 2019 - Paper Submission * Fri 9 Aug 2019 - Author Notification * Fri 16 Aug 2019 - Artifact Submission * Fri 30 Aug 2019 - Artifact Kick-the-tires Author Response (7 days) * Fri 20 Sep 2019 - Camera ready deadline * Wed 25 Sep 2019 - Artifact notification * Fri 27 Sep 2019 - Artifact-related paper updates * Mon-Tue 21-22 Oct 2018 - SLE Conference --------------------------- Types of Submissions --------------------------- SLE 2019 solicits three types of contributions: Research Papers, Tools Papers, and New Ideas/Vision papers. * Research papers These should report a substantial research contribution to SLE or successful application of SLE techniques or both. Full paper submissions must not exceed 12 pages, excluding bibliography. * Tool papers Because of SLE?s interest in tools, we seek papers that present software tools related to the field of SLE. Selection criteria include originality of the tool, its innovative aspects, and relevance to SLE. Any of the SLE topics of interest are appropriate areas for tool demonstrations. Submissions must provide a tool description of 4 pages excluding bibliography, and a demonstration outline including screenshots of up to 6 pages. Tool demonstrations must have the keywords ?Tool Demo? or ?Tool Demonstration? in the title. The 4-page tool description will, if the demonstration is accepted, be published in the proceedings. The 6-page demonstration outline will be used by the program committee only for evaluating the submission. *New ideas / vision papers New ideas papers should describe new, non-conventional SLE research approaches that depart from standard practice. They are intended to describe well-defined research ideas that are at an early stage of investigation. Vision papers are intended to present new unifying theories about existing SLE research that can lead to the development of new technologies or approaches. New ideas / vision papers must not exceed 4 pages, excluding bibliography. *Workshops Workshops will be organized by SPLASH. Please inform us and contact the SPLASH organizers if you would like to organize a workshop of interest to the SLE audience. Information on how to submit workshops can be found at the SPLASH 2019 Website. --------------------------- Artifact Evaluation --------------------------- SLE will continue to use an evaluation process for assessing the quality of the artifacts on which papers are based to foster the culture of experimental reproducibility. Authors of accepted papers are invited to submit artifacts. For more information, please have a look at the Artifact Evaluation page. --------------------------- Submission Details --------------------------- Paper Format: Submissions must conform to the ACM SIGPLAN Conference Format ?acmart?; please make sure that you always use the latest ACM SIGPLAN acmart LaTeX template, and that the document class definition is \documentclass[sigplan,anonymous,review]{acmart}. Do not make any changes to this format! Using the Word template is strongly discouraged. Ensure that your submission is legible when printed on a black and white printer. In particular, please check that colors remain distinct and font sizes in figures and tables are legible. To increase fairness in reviewing, a double-blind review process has become standard across SIGPLAN conferences. For the first time, SLE will follow the double-blind process. Author names and institutions should be omitted from submitted papers, and references to the authors? own related work should be in the third person. No other changes are necessary, and authors will not be penalized if reviewers are able to infer their identities in implicit ways. All submissions must be in PDF format. Concurrent Submissions: Papers must describe unpublished work that is not currently submitted for publication elsewhere as described by SIGPLAN?s Republication Policy. Submitters should also be aware of ACM?s Policy and Procedures on Plagiarism. Submissions that violate these policies will be desk-rejected. Submission Site: Submissions will be accepted at https://sle19.hotcrp.com/ --------------------------- Reviewing Process --------------------------- All submitted papers will be reviewed by at least three members of the program committee. Research papers and tool papers will be evaluated concerning novelty, correctness, significance, readability, and alignment with the conference call. New ideas / vision papers will be evaluated primarily concerning novelty, significance, readability, and alignment with the conference call. For fairness reasons, all submitted papers must conform to the above instructions. Submissions that violate these instructions may be rejected without review, at the discretion of the PC chairs. --------------------------- Awards --------------------------- * Distinguished paper: Award for most notable paper, as determined by the PC chairs based on the recommendations of the programme committee. * Distinguished reviewer: Award for distinguished reviewer, as determined by the PC chairs. * Distinguished artifact: Award for the artifact most significantly exceeding expectations, as determined by the AEC chairs based on the recommendations of the artifact evaluation committee. --------------------------- Publication --------------------------- All accepted papers will be published in the ACM Digital Library. AUTHORS TAKE NOTE: The official publication date is the date the proceedings are made available in the ACM Digital Library. This date may be up to two weeks prior to the first day of the conference. The official publication date affects the deadline for any patent filings related to published work. --------------------------- Organisation --------------------------- Chairs: * General chair: Oscar Nierstrasz (University of Bern, Switzerland) * Program co-chair: Bruno Oliveira (University of Hong Kong, China) * Program co-chair: Jeff Gray (University of Alabama, USA) * Artefact Evaluation co-chair: Emma S?derberg (Lund University, Sweden) * Artefact Evaluation co-chair: Abel Gomez (Universitat Oberta de Catalunya, Spain) Program Committee: Xuan Bi (Standard Chartered Bank) Erwan Bousse (TU Wien) Loli Burgeuno (Open University of Catalonia) Marsha Chechik (University of Toronto) Matteo Cimini (University of Massachusetts, Lowell) Thomas Degueule (CWI) Juan de Lara (Universidad Aut?noma de Madrid) Juergen Dingel (Queen's University) Romina Eramo (University of L'Aquila) Sebastian Gerard (CEA) Paolo Giarusso (TU Delft) Esther Guerra (Universidad Aut?noma de Madrid) Pablo Inostroza (CWI) Dimitris Kolovos (University of York) Marjan Mernik (University of Maribor) Alfonso Pierantonio (University of L'Aquila) Jaroslav Porub?n (University of Ko?ice) Casper Poulsen (TU Delft) Yann Regis-Gianas (Paris 7/INRIA) Bernhard Rumpe (RWTH Aachen University) Markus Schordan (Lawrence Livermore National Laboratory) Neil Sculthorpe (Nottingham Trent University) Marco Servetto (Victoria University of Wellington) Elizabeth Scott (Royal Holloway) Eugene Syriani (University of Montreal) Ulyana Tikhonova (CWI) Juha-Pekka Tolvanen (MetaCase) Antonio Valecillo (University of Malaga) Mark van den Brand (TU Eindhoven) Vadim Zaytsev (Raincode Labs) Tian Zhang (Nanjing University) --------------------------- Contact --------------------------- For additional information, clarification, or answers to questions, please contact the organizers by email (bruno at cs.hku.hk and gray at cs.ua.edu) -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Wed Jun 5 13:08:33 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Wed, 5 Jun 2019 12:08:33 +0100 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: References: Message-ID: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> Here is another question about Prop in Agda 2.6. Can anyone enlighten me? The documentation says "Just as for Set, we can define new types in Prop?s as data or record types? However, although Agda 2.6 allows the declaration of the following one-constructor datatype data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where _,_ : (x : A)(p : P x) ? ? A P if instead I try to define a record type record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where constructor _,_ field fst : A snd : B fst Agda complains (somewhat ungrammatically) that "Set l is not less or equal than Prop (l ? m) when checking the definition of ?? So it doesn?t mind the parameter (A : Set l) when defining a datatype in Prop (l ? m), but does mind it when defining a record type. Why is that? Andy From Jesper at sikanda.be Wed Jun 5 14:34:07 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 5 Jun 2019 14:34:07 +0200 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> References: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> Message-ID: Hi Andy, When you define a datatype in Prop, the resulting type is automatically 'squashed', i.e. any two elements are equal. In contrast, for record types this is not possible because then it is impossible to define the projections. For your definition of ? in Prop, (true , _) is equal to (false , _) of type `? Bool (? _ ? ?)`, but their first projections are not equal. It would theoretically be possible to have such a record type but not give access to the projections and disabling eta-equality, but then you could've equally defined it as a single-constructor datatype. -- Jesper On Wed, Jun 5, 2019 at 1:09 PM Andrew Pitts wrote: > Here is another question about Prop in Agda 2.6. Can anyone enlighten me? > > The documentation says > > "Just as for Set, we can define new types in Prop?s as data or record > types? > > However, although Agda 2.6 allows the declaration of the following > one-constructor datatype > > data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where > _,_ : (x : A)(p : P x) ? ? A P > > if instead I try to define a record type > > record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where > constructor _,_ > field > fst : A > snd : B fst > > Agda complains (somewhat ungrammatically) that > > "Set l is not less or equal than Prop (l ? m) when checking the definition > of ?? > > So it doesn?t mind the parameter (A : Set l) when defining a datatype in > Prop (l ? m), but does mind it when defining a record type. > > Why is that? > > Andy > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Wed Jun 5 15:45:22 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Wed, 5 Jun 2019 14:45:22 +0100 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: References: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> Message-ID: <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> Dear Jesper, > On 5 Jun 2019, at 13:34, Jesper Cockx wrote: > > Hi Andy, > > When you define a datatype in Prop, the resulting type is automatically 'squashed', i.e. any two elements are equal. In contrast, for record types this is not possible because then it is impossible to define the projections. For your definition of ? in Prop, (true , _) is equal to (false , _) of type `? Bool (? _ ? ?)`, but their first projections are not equal. It would theoretically be possible to have such a record type but not give access to the projections and disabling eta-equality, but then you could've equally defined it as a single-constructor datatype. I see. So to paraphrase your explanation, Agda imposes a simple syntactic restriction on what record types can be declared to have type Prop in order to maintain the soundness of forcing all elements of an element of a Prop to be definitionally equal. I can think of a simple syntactic restriction that is less liberal than the current one: don?t allow record types in Prop! Is there an example of why my restriction is too restrictive? ?- in other words a case where using a record of Prop type is really better than using a corresponding single-constructor datatype of type Prop? (I am thinking that one often uses a record type in Set instead of a single-constructor-datatype in Set, in order to get definitional eta expansion; but that?s automatic for elements of Prop, due to the definitional proof irrelevance.) Andy > > -- Jesper > > On Wed, Jun 5, 2019 at 1:09 PM Andrew Pitts > wrote: > Here is another question about Prop in Agda 2.6. Can anyone enlighten me? > > The documentation says > > "Just as for Set, we can define new types in Prop?s as data or record types? > > However, although Agda 2.6 allows the declaration of the following one-constructor datatype > > data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where > _,_ : (x : A)(p : P x) ? ? A P > > if instead I try to define a record type > > record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where > constructor _,_ > field > fst : A > snd : B fst > > Agda complains (somewhat ungrammatically) that > > "Set l is not less or equal than Prop (l ? m) when checking the definition of ?? > > So it doesn?t mind the parameter (A : Set l) when defining a datatype in Prop (l ? m), but does mind it when defining a record type. > > Why is that? > > Andy > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Wed Jun 5 15:48:47 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 5 Jun 2019 15:48:47 +0200 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> References: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> Message-ID: I guess most of the reasons why one would use a record type instead of a single-constructor datatype still apply: - You get the projections for free - You can define new elements using copatterns - You can make the record coinductive if needed -- Jesper On Wed, Jun 5, 2019 at 3:46 PM Andrew Pitts wrote: > Dear Jesper, > > On 5 Jun 2019, at 13:34, Jesper Cockx wrote: > > Hi Andy, > > When you define a datatype in Prop, the resulting type is automatically > 'squashed', i.e. any two elements are equal. In contrast, for record types > this is not possible because then it is impossible to define the > projections. For your definition of ? in Prop, (true , _) is equal to > (false , _) of type `? Bool (? _ ? ?)`, but their first projections are not > equal. It would theoretically be possible to have such a record type but > not give access to the projections and disabling eta-equality, but then you > could've equally defined it as a single-constructor datatype. > > > I see. So to paraphrase your explanation, Agda imposes a simple syntactic > restriction on what record types can be declared to have type Prop in order > to maintain the soundness of forcing all elements of an element of a Prop > to be definitionally equal. > > I can think of a simple syntactic restriction that is less liberal than > the current one: don?t allow record types in Prop! Is there an example of > why my restriction is too restrictive? ?- in other words a case where using > a record of Prop type is really better than using a corresponding > single-constructor datatype of type Prop? > > (I am thinking that one often uses a record type in Set instead of a > single-constructor-datatype in Set, in order to get definitional eta > expansion; but that?s automatic for elements of Prop, due to the > definitional proof irrelevance.) > > Andy > > > > -- Jesper > > On Wed, Jun 5, 2019 at 1:09 PM Andrew Pitts > wrote: > >> Here is another question about Prop in Agda 2.6. Can anyone enlighten me? >> >> The documentation says >> >> "Just as for Set, we can define new types in Prop?s as data or record >> types? >> >> However, although Agda 2.6 allows the declaration of the following >> one-constructor datatype >> >> data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where >> _,_ : (x : A)(p : P x) ? ? A P >> >> if instead I try to define a record type >> >> record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where >> constructor _,_ >> field >> fst : A >> snd : B fst >> >> Agda complains (somewhat ungrammatically) that >> >> "Set l is not less or equal than Prop (l ? m) when checking the >> definition of ?? >> >> So it doesn?t mind the parameter (A : Set l) when defining a datatype in >> Prop (l ? m), but does mind it when defining a record type. >> >> Why is that? >> >> Andy >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Wed Jun 5 15:55:54 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Wed, 5 Jun 2019 14:55:54 +0100 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: References: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> Message-ID: <941F7553-2725-439A-8D67-8ADE62BA40D3@cl.cam.ac.uk> > On 5 Jun 2019, at 14:48, Jesper Cockx wrote: > > I guess most of the reasons why one would use a record type instead of a single-constructor datatype still apply: > - You get the projections for free > - You can define new elements using copatterns maybe so, but I think I?m going to impose the no-records-in-Prop restriction manually until I?m forced to give it up > - You can make the record coinductive if needed whoa! coinductively defined propositions, now there?s a thought? A :-) > > -- Jesper > > On Wed, Jun 5, 2019 at 3:46 PM Andrew Pitts > wrote: > Dear Jesper, > >> On 5 Jun 2019, at 13:34, Jesper Cockx > wrote: >> >> Hi Andy, >> >> When you define a datatype in Prop, the resulting type is automatically 'squashed', i.e. any two elements are equal. In contrast, for record types this is not possible because then it is impossible to define the projections. For your definition of ? in Prop, (true , _) is equal to (false , _) of type `? Bool (? _ ? ?)`, but their first projections are not equal. It would theoretically be possible to have such a record type but not give access to the projections and disabling eta-equality, but then you could've equally defined it as a single-constructor datatype. > > I see. So to paraphrase your explanation, Agda imposes a simple syntactic restriction on what record types can be declared to have type Prop in order to maintain the soundness of forcing all elements of an element of a Prop to be definitionally equal. > > I can think of a simple syntactic restriction that is less liberal than the current one: don?t allow record types in Prop! Is there an example of why my restriction is too restrictive? ?- in other words a case where using a record of Prop type is really better than using a corresponding single-constructor datatype of type Prop? > > (I am thinking that one often uses a record type in Set instead of a single-constructor-datatype in Set, in order to get definitional eta expansion; but that?s automatic for elements of Prop, due to the definitional proof irrelevance.) > > Andy > > >> >> -- Jesper >> >> On Wed, Jun 5, 2019 at 1:09 PM Andrew Pitts > wrote: >> Here is another question about Prop in Agda 2.6. Can anyone enlighten me? >> >> The documentation says >> >> "Just as for Set, we can define new types in Prop?s as data or record types? >> >> However, although Agda 2.6 allows the declaration of the following one-constructor datatype >> >> data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where >> _,_ : (x : A)(p : P x) ? ? A P >> >> if instead I try to define a record type >> >> record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where >> constructor _,_ >> field >> fst : A >> snd : B fst >> >> Agda complains (somewhat ungrammatically) that >> >> "Set l is not less or equal than Prop (l ? m) when checking the definition of ?? >> >> So it doesn?t mind the parameter (A : Set l) when defining a datatype in Prop (l ? m), but does mind it when defining a record type. >> >> Why is that? >> >> Andy >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Wed Jun 5 16:22:36 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Wed, 5 Jun 2019 14:22:36 +0000 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> References: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> Message-ID: <7A14A714-0C8F-4BD9-AC5A-0EAF6DCB6845@exmail.nottingham.ac.uk> I would paraphrase tis differently: the eta rule for record times makes the projections strictly injective and this is obviously false in this example. Or do I miss something here? Thorsten From: Agda on behalf of Andrew Pitts Date: Wednesday, 5 June 2019 at 14:45 To: Jesper Cockx , agda list Subject: Re: [Agda] Prop in Agda 2.6 - again Dear Jesper, On 5 Jun 2019, at 13:34, Jesper Cockx > wrote: Hi Andy, When you define a datatype in Prop, the resulting type is automatically 'squashed', i.e. any two elements are equal. In contrast, for record types this is not possible because then it is impossible to define the projections. For your definition of ? in Prop, (true , _) is equal to (false , _) of type `? Bool (? _ ? ?)`, but their first projections are not equal. It would theoretically be possible to have such a record type but not give access to the projections and disabling eta-equality, but then you could've equally defined it as a single-constructor datatype. I see. So to paraphrase your explanation, Agda imposes a simple syntactic restriction on what record types can be declared to have type Prop in order to maintain the soundness of forcing all elements of an element of a Prop to be definitionally equal. I can think of a simple syntactic restriction that is less liberal than the current one: don?t allow record types in Prop! Is there an example of why my restriction is too restrictive? ?- in other words a case where using a record of Prop type is really better than using a corresponding single-constructor datatype of type Prop? (I am thinking that one often uses a record type in Set instead of a single-constructor-datatype in Set, in order to get definitional eta expansion; but that?s automatic for elements of Prop, due to the definitional proof irrelevance.) Andy -- Jesper On Wed, Jun 5, 2019 at 1:09 PM Andrew Pitts > wrote: Here is another question about Prop in Agda 2.6. Can anyone enlighten me? The documentation says "Just as for Set, we can define new types in Prop?s as data or record types? However, although Agda 2.6 allows the declaration of the following one-constructor datatype data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where _,_ : (x : A)(p : P x) ? ? A P if instead I try to define a record type record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where constructor _,_ field fst : A snd : B fst Agda complains (somewhat ungrammatically) that "Set l is not less or equal than Prop (l ? m) when checking the definition of ?? So it doesn?t mind the parameter (A : Set l) when defining a datatype in Prop (l ? m), but does mind it when defining a record type. Why is that? Andy _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Wed Jun 5 16:37:23 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 5 Jun 2019 16:37:23 +0200 Subject: [Agda] Prop in Agda 2.6 - again In-Reply-To: <7A14A714-0C8F-4BD9-AC5A-0EAF6DCB6845@exmail.nottingham.ac.uk> References: <82070951-F546-4BF5-8989-BBF24626A863@cl.cam.ac.uk> <90C00133-36C7-4786-B48C-0067C5462DB7@cl.cam.ac.uk> <7A14A714-0C8F-4BD9-AC5A-0EAF6DCB6845@exmail.nottingham.ac.uk> Message-ID: Hi Thorsten, That's what I thought at first, but then I realized it would be unsound to have the projections even *without* eta equality, since you would still be able to get something relevant out of a Prop. So it is the existence of the projections itself rather than eta which is problematic for such a type. -- Jesper On Wed, Jun 5, 2019 at 4:23 PM Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > I would paraphrase tis differently: the eta rule for record times makes > the projections strictly injective and this is obviously false in this > example. Or do I miss something here? > > > > Thorsten > > > > *From: *Agda on behalf of Andrew Pitts < > andrew.pitts at cl.cam.ac.uk> > *Date: *Wednesday, 5 June 2019 at 14:45 > *To: *Jesper Cockx , agda list > *Subject: *Re: [Agda] Prop in Agda 2.6 - again > > > > Dear Jesper, > > > > On 5 Jun 2019, at 13:34, Jesper Cockx wrote: > > > > Hi Andy, > > > > When you define a datatype in Prop, the resulting type is automatically > 'squashed', i.e. any two elements are equal. In contrast, for record types > this is not possible because then it is impossible to define the > projections. For your definition of ? in Prop, (true , _) is equal to > (false , _) of type `? Bool (? _ ? ?)`, but their first projections are > not equal. It would theoretically be possible to have such a record type > but not give access to the projections and disabling eta-equality, but then > you could've equally defined it as a single-constructor datatype. > > > > I see. So to paraphrase your explanation, Agda imposes a simple syntactic > restriction on what record types can be declared to have type Prop in order > to maintain the soundness of forcing all elements of an element of a Prop > to be definitionally equal. > > > > I can think of a simple syntactic restriction that is less liberal than > the current one: don?t allow record types in Prop! Is there an example of > why my restriction is too restrictive? ?- in other words a case where using > a record of Prop type is really better than using a corresponding > single-constructor datatype of type Prop? > > > > (I am thinking that one often uses a record type in Set instead of a > single-constructor-datatype in Set, in order to get definitional eta > expansion; but that?s automatic for elements of Prop, due to the > definitional proof irrelevance.) > > > > Andy > > > > > > > > -- Jesper > > > > On Wed, Jun 5, 2019 at 1:09 PM Andrew Pitts > wrote: > > Here is another question about Prop in Agda 2.6. Can anyone enlighten me? > > The documentation says > > "Just as for Set, we can define new types in Prop?s as data or record > types? > > However, although Agda 2.6 allows the declaration of the following > one-constructor datatype > > data ? {l m}(A : Set l)(P : A ? Prop m) : Prop (l ? m) where > _,_ : (x : A)(p : P x) ? ? A P > > if instead I try to define a record type > > record ? {l m : Level}(A : Set l)(B : A ? Prop m) : Prop (l ? m) where > constructor _,_ > field > fst : A > snd : B fst > > Agda complains (somewhat ungrammatically) that > > "Set l is not less or equal than Prop (l ? m) when checking the > definition of ?? > > So it doesn?t mind the parameter (A : Set l) when defining a datatype in > Prop (l ? m), but does mind it when defining a record type. > > Why is that? > > Andy > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From kaposi.ambrus at gmail.com Thu Jun 6 12:37:22 2019 From: kaposi.ambrus at gmail.com (Ambrus Kaposi) Date: Thu, 6 Jun 2019 12:37:22 +0200 Subject: [Agda] Call for Conference Grant Applications (Inclusiveness Target Countries) In-Reply-To: References: Message-ID: Call for Conference Grant Applications The European research network on types for programming and verification (EUTypes COST Action, https://eutypes.cs.ru.nl) supports attendance of young researchers presenting work on type theory at international conferences via travel grants. The rules are described here: https://eutypes.cs.ru.nl/ConfGrants The main points are: * Only researchers from ITCs participating in the action are eligible. As of June 2018, the ITCs involved in EUTypes are: Bosnia and Herzegovina, Cyprus, Czech Republic, Estonia, Hungary, Lithuania, Macedonia, Poland, Portugal, Romania, Serbia, Slovenia. * Only PhD students and Early Career Investigators (researchers whose PhD degree is at most 8 years old) are eligible. * The grantee must give a talk or present a poster on the topic of type theory. Applications have to be submitted through the e-COST system: https://e-services.cost.eu/conferencegrant Please inform researchers in your country who might be interested and contact me if you have any questions. Many thanks, Ambrus Kaposi EUTypes conference grant coordinator From R.T.A.Aarssen at cwi.nl Fri Jun 7 00:40:53 2019 From: R.T.A.Aarssen at cwi.nl (Rodin Aarssen) Date: Fri, 7 Jun 2019 00:40:53 +0200 (CEST) Subject: [Agda] GPCE 2019: 2nd Call for Papers - Athens, Greece; October 21-22 Message-ID: <1492865961.884925.1559860853289.JavaMail.zimbra@cwi.nl> CALL FOR PAPERS 18th International Conference on Generative Programming: Concepts & Experiences (GPCE 2019) October 21-22, 2019 Athens, Greece (co-located with SPLASH 2019) https://conf.researchr.org/home/gpce-2019 http://twitter.com/GPCECONF http://www.facebook.com/GPCEConference IMPORTANT DATES * Submission of abstracts: June 14, 2019 * Submission of papers: June 21, 2019 * Paper notification: August 9, 2019 Submission site: https://gpce19.hotcrp.com/ -------------------------------------------------------------------------- SCOPE GPCE is a venue for researchers and practitioners interested in techniques and tools for code generation, language implementation, and metaprogramming. GPCE seeks conceptual, theoretical, empirical, and technical contributions to its topics of interest, which include but are not limited to: * program transformation, staging, macro systems, preprocessors, program synthesis, and code-recommendation systems, * domain-specific languages, language embedding, language design, and language workbenches, * feature-oriented programming, domain engineering, and feature interactions, * applications and properties of code generation, language implementation, and product-line development. Authors are welcome to check with the program co-chairs whether their planned papers are in scope. PAPER SELECTION The GPCE program committee will evaluate each submission according to the following selection criteria: * Novelty. Papers must present new ideas or evidence and place them appropriately within the context established by previous research in the field. * Significance. The results in the paper must have the potential to add to the state of the art or practice in significant ways. * Evidence. The paper must present evidence supporting its claims. Examples of evidence include formalizations and proofs, implemented systems, experimental results, statistical analyses, and case studies. * Clarity. The paper must present its contributions and results clearly. PAPER CATEGORIES GPCE solicits three kinds of submissions. * Full Papers reporting original and unpublished results of research that contribute to scientific knowledge in any GPCE topic listed above. Full paper submissions must not exceed 12 pages excluding bibliography. * Short Papers presenting unconventional ideas or visions about any GPCE topic listed above. Short papers do not always require complete results as in the case of a full paper. In this way, authors can introduce new ideas to the community and get early feedback. Please note that short papers are not intended to be position statements. Short papers are included in the proceedings and will be presented at the conference. Short paper submissions must not exceed 6 pages excluding bibliography. * Tool Demonstrations presenting tools for any GPCE topic listed above. Tools must be available for use and must not be purely commercial. Submissions must provide a tool description not exceeding 6 pages excluding bibliography and a separate demonstration outline including screenshots also not exceeding 6 pages. Tool demonstrations must have the keywords "Tool Demo" or "Tool Demonstration" in their title. If the submission is accepted, the tool description will be published in the proceedings. The demonstration outline will only be used by the program committee for evaluating the submission. PAPER SUBMISSION All submissions must use the ACM SIGPLAN Conference Format "acmart", using the "sigplan" sub-format, and 10 point font. Additional details and links to templates and the LaTeX class file can be found on the conference web site: https://conf.researchr.org/home/gpce-2019. To increase fairness in reviewing, a double-blind review process has become standard across SIGPLAN conferences. GPCE will follow a very lightweight model, where author identities are revealed to reviewers after submitting their initial reviews. Hence, the purpose is not to conceal author identities at all cost, but merely to provide reviewers with an unbiased first look at a submission. Author names and institutions should be omitted from submitted papers, and references to the authors' own related work should be in the third person. No other changes are necessary, and authors will not be penalized if reviewers are able to infer their identities in implicit ways. Papers must be submitted using HotCRP: https://gpce19.hotcrp.com/ For additional information, clarification, or answers to questions please contact the program co-chairs. ORGANIZATION Chairs * General chair: Ina Schaefer (TU Braunschweig) * Program co-chair: Christoph Reichenbach (Lund University) * Program co-chair: Tijs van der Storm (CWI / University of Groningen) Program Committee * Jonathan Aldrich (CMU) * Juliana Alves Pereira (University of Rennes, INRIA) * Marsha Chechik (University of Toronto) * Shigeru Chiba (University of Tokyo) * Thomas Degueule (CWI) * Sebastian Erdweg (TU Delft) * Matthew Flatt (University of Utah) * Robert Gl?ck (University of Copenhagen) * Elisa Gonzalez Boix (VUB) * Geoffrey Mainland (Drexel University) * Chris Martens (NCSU) * Maryam Mehri Dehnavi (University of Toronto) * Peter Mosses (Swansea University / TU Delft) * David Pearce (Victoria University of Wellington) * Alex Potanin (Victoria University of Wellington) * Larissa Rocha Soares (Federal University of Bahia) * Ulrik Schultz (University of Southern Denmark) * Sandro Schulze (University of Magdeburg) * Christoph Seidl (TU Braunschweig) * Michel Steuwer (University of Glasgow) * Sam Tobin Hochstadt (Indiana University) * Kanae Tsushima (National Institute of Informatics) * Philip Wadler (University of Edinburgh) * Eric Walkingshaw (Oregon State University) * Adam Welc (Uber) * Peng Wu (Huawei) From publicityifl at gmail.com Fri Jun 7 11:12:22 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Fri, 7 Jun 2019 02:12:22 -0700 Subject: [Agda] Final call for regular papers for IFL 2019 (Implementation and Application of Functional Languages) Message-ID: Hello, Please, find below the call for papers for IFL 2019. With respect to the previous call, the deadline for submitting regular papers has been changed to June 15th. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Publicity Chair of IFL --- ================================================================================ IFL 2019 31st Symposium on Implementation and Application of Functional Languages National University of Singapore September 25th-27th, 2019 http://2019.iflconference.org ================================================================================ ### Scope The goal of the IFL symposia is to bring together researchers actively engaged in the implementation and application of functional and function-based programming languages. IFL 2019 will be a venue for researchers to present and discuss new ideas and concepts, work in progress, and publication-ripe results related to the implementation and application of functional languages and function-based programming. Topics of interest to IFL include, but are not limited to: - language concepts - type systems, type checking, type inferencing - compilation techniques - staged compilation - run-time function specialization - run-time code generation - partial evaluation - (abstract) interpretation - metaprogramming - generic programming - automatic program generation - array processing - concurrent/parallel programming - concurrent/parallel program execution - embedded systems - web applications - (embedded) domain specific languages - security - novel memory management techniques - run-time profiling performance measurements - debugging and tracing - virtual/abstract machine architectures - validation, verification of functional programs - tools and programming techniques - (industrial) applications ### Keynote Speaker * Olivier Danvy, Yale-NUS College ### Submissions and peer-review Differently from previous editions of IFL, IFL 2019 solicits two kinds of submissions: * Regular papers (12 pages including references) * Draft papers for presentations ('weak' limit between 8 and 15 pages) Regular papers will undergo a rigorous review by the program committee, and will be evaluated according to their correctness, novelty, originality, relevance, significance, and clarity. A set of regular papers will be conditionally accepted for publication. Authors of conditionally accepted papers will be provided with committee reviews along with a set of mandatory revisions. Regular papers not accepted for publication will be considered as draft papers, at the request of the author. Draft papers will be screened to make sure that they are within the scope of IFL, and will be accepted for presentation or rejected accordingly. Prior to the symposium: Authors of conditionally accepted papers and accepted presentations will submit a pre-proceedings version of their work that will appear in the draft proceedings distributed at the symposium. The draft proceedings does not constitute a formal publication. We require that at least one of the authors present the work at IFL 2019. After the symposium: Authors of conditionally accepted papers will submit a revised versions of their paper for the formal post-proceedings. The program committee will assess whether the mandatory revisions have been adequately addressed by the authors and thereby determines the final accept/reject status of the paper. Our interest is to ultimately accept all conditionally accepted papers. If you are an author of a conditionally accepted paper, please make sure that you address all the concerns of the reviewers. Authors of accepted presentations will be given the opportunity to incorporate the feedback from discussions at the symposium and will be invited to submit a revised full article for the formal post-proceedings. The program committee will evaluate these submissions according to their correctness, novelty, originality, relevance, significance, and clarity, and will thereby determine whether the paper is accepted or rejected. ### Publication The formal proceedings will appear in the International Conference Proceedings Series of the ACM Digital Library. At no time may work submitted to IFL be simultaneously submitted to other venues; submissions must adhere to ACM SIGPLAN's republication policy: http://www.sigplan.org/Resources/Policies/Republication ### Important dates Submission of regular papers: June 15, 2019 Submission of draft papers: July 15, 2019 Regular and draft papers notification: August 1, 2019 Deadline for early registration: August 15, 2019 Submission of pre-proceedings version: September 15, 2019 IFL Symposium: September 25-27, 2019 Submission of papers for post-proceedings: November 30, 2019 Notification of acceptance: January 31, 2020 Camera-ready version: February 29, 2020 ### Submission details All contributions must be written in English. Papers must use the ACM two columns conference format, which can be found at: http://www.acm.org/publications/proceedings-template Authors submit through EasyChair: https://easychair.org/conferences/?conf=ifl2019 ### Peter Landin Prize The Peter Landin Prize is awarded to the best paper presented at the symposium every year. The honored article is selected by the program committee based on the submissions received for the formal review process. The prize carries a cash award equivalent to 150 Euros. ### Organization and Program committee Chairs: Jurrien Stutterheim (Standard Chartered Bank Singapore), Wei Ngan Chin (National University of Singapore) Program Committee: - Olaf Chitil, University of Kent - Clemens Grelck, University of Amsterdam - Daisuke Kimura, Toho University - Pieter Koopman, Radboud University - Tamas Kozsik, Eotvos Lorand University - Roman Leschinskiy, Facebook - Ben Lippmeier, The University of New South Wales - Marco T. Morazan, Seton Hall University - Sven-Bodo Scholz, Heriot-Watt University - Tom Schrijvers, Katholieke Universiteit Leuven - Alejandro Serrano, Utrecht University - Tony Sloane, Macquarie University - Simon Thompson, University of Kent - Marcos Viera, Universidad de la Republica - Wei Ngan Chin, NUS - Jurrien Stutterheim, Standard Chartered Bank ### Venue The 31st IFL is organized by the National University of Singapore. Singapore is located in the heart of South-East Asia, and the city itself is extremely well connected by trains and taxis. See the website for more information on the venue. ### Acknowledgments This call-for-papers is an adaptation and evolution of content from previous instances of IFL. We are grateful to prior organizers for their work, which is reused here. A part of IFL 2019 format and CFP language that describes conditionally accepted papers has been adapted from call-for-papers of OOPSLA conferences. -------------- next part -------------- An HTML attachment was scrubbed... URL: From david.janin at labri.fr Mon Jun 10 12:41:09 2019 From: david.janin at labri.fr (david.janin at labri.fr) Date: Mon, 10 Jun 2019 12:41:09 +0200 Subject: [Agda] On termination checkers Message-ID: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> Hello, While translating from CoQ to Agda the paper [I] ? One Monad to Prove Them All ? by Sandra, Dylus, Jan Christiansen, and Finn Teegen, I am bumping into the following feature of Agda termination checker that sounds (to me) quite uncomfortable. Simply (and possibly wrongly) said, it seems that with nested data type definitions, helper functions on the most nested type cannot be used in inductive definitions of functions on the least nested one. Instead, we are forced (at least I feel forced) to inline / unfold these helper functions by hand, and later redo proofs about them. Of course, this feature does not reduce the set of possible inductive definitions but make them more tedious to write down. With data types parameterized by Free Functor as in [I], this forbids (me) using bind in recursive function over these types, which is a burden? I guess this is a story well known by experts in Agda, and I?ve noticed in Jesper thesis (Example 2.32. p 57) that there are indeed tricky issues around this problem. Still, how can I cope with it ? Any suggestion much welcome, Best, David *** Below the simplest example I could build illustrating my point. The same example, given below, is accepted in CoQ. *** in Agda data Pack (A : Set) : Set where pack : A -> Pack A unpack : ? {A} -> Pack A -> A unpack (pack a) = a data PList (A : Set) : Set where pnil : PList A pcons : A -> Pack (PList A) -> PList A pappend : ? {A : Set} -> PList A -> PList A -> PList A pappend {A} pnil l = l pappend {A} (pcons a pp@(pack l')) l -- = pcons a (pack (pappend l' l)) -- (1) termination check succeeds = pcons a (pack (pappend (unpack pp) l)) ? (2) termination check fails *** in CoQ Inductive Pack (A : Type) : Type := pack : A -> Pack A. Arguments pack : default implicits. Definition unpack {A : Type} (pp : Pack A) : A := match pp with pack a => a end. Inductive PList (A : Type) : Type := pnil : PList A | pcons : A -> Pack (PList A) -> PList A. Arguments pcons : default implicits. Arguments pnil {A}. Fixpoint pappend {A : Set} (l1 l2 : PList A) : PList A := match l1 with pnil => l2 | pcons x pp => pcons x (pack (pappend (unpack pp) l2)) end. From Graham.Hutton at nottingham.ac.uk Mon Jun 10 12:43:00 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Mon, 10 Jun 2019 10:43:00 +0000 Subject: [Agda] Assistant/Associate Professorships in Nottingham Message-ID: Dear all, As part of a strategic expansion, the School of Computer Science at the University of Nottingham is seeking to make multiple new appointments at the Assistant or Associate Professor level: https://tinyurl.com/y4qfdqps https://tinyurl.com/y2uw6tsa Applications in the area of the Functional Programming (FP) lab are strongly encouraged! The FP lab is keen to receive applications from candidates with an excellent publication record (e.g. papers in leading venues such as LICS, POPL, ICFP, JFP, TOPLAS, etc) and the ability to secure external funding to support their research. Further information about the FP lab is available from: https://tinyurl.com/y2ekdkqa The deadline for applications is Monday 8th July 2019. The advert mentions some specific research areas, but the positions are open to applicants from any area of Computer Science. -- Graham Hutton and Thorsten Altenkirch This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From nad at cse.gu.se Mon Jun 10 14:52:22 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 10 Jun 2019 14:52:22 +0200 Subject: [Agda] On termination checkers In-Reply-To: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> Message-ID: On 10/06/2019 12.41, david.janin at labri.fr wrote: > Still, how can I cope with it ? Any suggestion much welcome, One option might be to use sized types, but this could lead to other complications. -- /NAD From david.janin at labri.fr Mon Jun 10 15:11:26 2019 From: david.janin at labri.fr (david.janin at labri.fr) Date: Mon, 10 Jun 2019 15:11:26 +0200 Subject: [Agda] On termination checkers In-Reply-To: References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> Message-ID: <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> Indeed, with sized types. For the record, Guillaume Allais suggested this to me. His solution is (I think) worth being posted for newbies as I am for it is a fairly simple example of sized type usage with simple inductive data type. ----------------------------------------------------------------------- open import Size data Pack (A : Set) : Set where pack : A -> Pack A unpack : ? {A} -> Pack A -> A unpack (pack a) = a data PList (A : Set) : Size ? Set where pnil : ? {i} ? PList A (? i) pcons : ? {i} ? A -> Pack (PList A i) -> PList A (? i) pappend : ? {A i} -> PList A i -> PList A _ -> PList A _ pappend pnil l = l pappend (pcons a pp) l = pcons a (pack (pappend (unpack pp) l)) ----------------------------------------------------------------------- Now, I would be the compiler, I would do nothing else but annotating the Plist data type constructor as above with such a size information? Constructor pnil can also be typed ? {i} ? PList A i is fine as well, which I would rather do as a compiler? no need to increase any size here? What strikes me is that, in the code above, we say nothing about Pack and unpack? leaving the nevertheless quite smart compiler checking that everything is fine? and even guessing some size constraints in pappend? which can be put to ? in both cases as Guillaume showed me. Is there any hope Adga termination checker can automatically do that for me one day :-) david > Le 10 juin 2019 ? 14:52, Nils Anders Danielsson a ?crit : > > On 10/06/2019 12.41, david.janin at labri.fr wrote: >> Still, how can I cope with it ? Any suggestion much welcome, > > One option might be to use sized types, but this could lead to other > complications. > > -- > /NAD From andrew.pitts at cl.cam.ac.uk Mon Jun 10 16:06:12 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Mon, 10 Jun 2019 15:06:12 +0100 Subject: [Agda] On termination checkers In-Reply-To: <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> Message-ID: > On 10 Jun 2019, at 14:11, david.janin at labri.fr wrote: > > Indeed, with sized types. > > For the record, Guillaume Allais suggested this to me. > His solution is (I think) worth being posted for newbies as I am for it is a fairly simple example of sized type usage with simple inductive data type. I have been working quite a lot recently with inductive definitions involving sized types and when I started I could find rather few examples to help me (compared with the number of examples of using sized types with coinductive definitions). One thing I have learnt by trial and error is to try to make sizes parameters rather than indices in data definitions (avoiding mentioning ? explicitly as much as possible). So I would write your example as ?????????????????????????????? open import Agda.Builtin.Size data Pack (A : Set) : Set where pack : A -> Pack A unpack : ? {A} -> Pack A -> A unpack (pack a) = a data PList (A : Set)(i : Size) : Set where pnil : PList A i pcons : ?{j : Size< i} ? A -> Pack (PList A j) -> PList A i pappend : ? {A i} -> PList A i -> PList A _ -> PList A _ pappend pnil l = l pappend (pcons a pp) l = pcons a (pack (pappend (unpack pp) l)) ?????????????????????????????? although I doubt that in this case it make that much difference. Perhaps an expert can comment on the pros and cons. Andy > ----------------------------------------------------------------------- > open import Size > > data Pack (A : Set) : Set where > pack : A -> Pack A > > unpack : ? {A} -> Pack A -> A > unpack (pack a) = a > > data PList (A : Set) : Size ? Set where > pnil : ? {i} ? PList A (? i) > pcons : ? {i} ? A -> Pack (PList A i) -> PList A (? i) > > pappend : ? {A i} -> PList A i -> PList A _ -> PList A _ > pappend pnil l = l > pappend (pcons a pp) l = pcons a (pack (pappend (unpack pp) l)) > ----------------------------------------------------------------------- From guillaume.allais at ens-lyon.org Tue Jun 11 09:53:48 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 11 Jun 2019 08:53:48 +0100 Subject: [Agda] On termination checkers In-Reply-To: References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> Message-ID: <6e380f6e-a3df-f800-2fa5-60d60ac1f298@ens-lyon.org> Hi Andrew, The main difference comes when you try to prove decidable equality of sized values (or anything that processes values in lock step). Let us consider the case where we compare `t u : PList A i` which happen to respectively be `t = pcons a t'` and `u = pcons b u'`. If you use `? i` as the return index in the `pcons` constructor then you learn that `i = ? i'` and both `t' u' : Pack (PList A i')`. You can keep comparing the subterms. Using the `Size< i` approach however, you get that `t' : Pack (PList A j)` for some `j` and `u' : Pack (PList A j')` for some a priori distinct `j'`. You are now stuck with subterms which have different types and the comparison function cannot be homogeneous anymore. This is part of the motivation for Abel, Vezzosi and Winterhalter's work on shape irrelevance in https://hal.archives-ouvertes.fr/hal-01596179 Cheers, gallais On 10/06/2019 15:06, Andrew Pitts wrote: > > >> On 10 Jun 2019, at 14:11, david.janin at labri.fr wrote: >> >> Indeed, with sized types. >> >> For the record, Guillaume Allais suggested this to me. >> His solution is (I think) worth being posted for newbies as I am for it is a fairly simple example of sized type usage with simple inductive data type. > > I have been working quite a lot recently with inductive definitions involving sized types and when I started I could find rather few examples to help me (compared with the number of examples of using sized types with coinductive definitions). One thing I have learnt by trial and error is to try to make sizes parameters rather than indices in data definitions (avoiding mentioning ? explicitly as much as possible). > > So I would write your example as > > ?????????????????????????????? > open import Agda.Builtin.Size > > data Pack (A : Set) : Set where > pack : A -> Pack A > > unpack : ? {A} -> Pack A -> A > unpack (pack a) = a > > data PList (A : Set)(i : Size) : Set where > pnil : PList A i > pcons : ?{j : Size< i} ? A -> Pack (PList A j) -> PList A i > > pappend : ? {A i} -> PList A i -> PList A _ -> PList A _ > pappend pnil l = l > pappend (pcons a pp) l = pcons a (pack (pappend (unpack pp) l)) > ?????????????????????????????? > > although I doubt that in this case it make that much difference. > > Perhaps an expert can comment on the pros and cons. > > Andy > > >> ----------------------------------------------------------------------- >> open import Size >> >> data Pack (A : Set) : Set where >> pack : A -> Pack A >> >> unpack : ? {A} -> Pack A -> A >> unpack (pack a) = a >> >> data PList (A : Set) : Size ? Set where >> pnil : ? {i} ? PList A (? i) >> pcons : ? {i} ? A -> Pack (PList A i) -> PList A (? i) >> >> pappend : ? {A i} -> PList A i -> PList A _ -> PList A _ >> pappend pnil l = l >> pappend (pcons a pp) l = pcons a (pack (pappend (unpack pp) l)) >> ----------------------------------------------------------------------- > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From andrew.pitts at cl.cam.ac.uk Tue Jun 11 17:48:56 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Tue, 11 Jun 2019 16:48:56 +0100 Subject: [Agda] On termination checkers In-Reply-To: <6e380f6e-a3df-f800-2fa5-60d60ac1f298@ens-lyon.org> References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> <6e380f6e-a3df-f800-2fa5-60d60ac1f298@ens-lyon.org> Message-ID: <3E51F2B9-B90A-49EF-AB56-2A5D4D554530@cl.cam.ac.uk> Hello Guillaume. > On 11 Jun 2019, at 08:53, Guillaume Allais wrote: > > The main difference comes when you try to prove decidable equality > of sized values (or anything that processes values in lock step). > Let us consider the case where we compare `t u : PList A i` which > happen to respectively be `t = pcons a t'` and `u = pcons b u'`. > > If you use `? i` as the return index in the `pcons` constructor then > you learn that `i = ? i'` and both `t' u' : Pack (PList A i')`. You > can keep comparing the subterms. > > Using the `Size< i` approach however, you get that `t' : Pack (PList A j)` > for some `j` and `u' : Pack (PList A j')` for some a priori distinct `j'`. > You are now stuck with subterms which have different types and the > comparison function cannot be homogeneous anymore. Thanks for that. I see the problem, but I?m not entirely convinced that one couldn?t work around such problems while still using the size-"size-parameterized? approach rather than the ?size-indexed? one. In particular... > This is part of the motivation for Abel, Vezzosi and Winterhalter's > work on shape irrelevance in https://hal.archives-ouvertes.fr/hal-01596179 ...thanks for pointing to that. I contemplated their motivating example (monus-diag in section 2) and came up with a simple solution the "size-parameterized? way (hence avoiding the need to contemplate shape irrelevancy, interesting though that might be). See the attached file of agda code if you are interested. Anyway, I think my main difficulty with sized types ? la Agda is that they introduce some quite non-trivial subtype relations (very un-Agda-ish :-)) and I am finding it hard to understand when Agda thinks one type involving size expressions is a subtype of another such type and when it doesn?t. Andy -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: SizedNat.agda Type: application/octet-stream Size: 1997 bytes Desc: not available URL: -------------- next part -------------- An HTML attachment was scrubbed... URL: From david.janin at labri.fr Wed Jun 12 11:09:54 2019 From: david.janin at labri.fr (david.janin at labri.fr) Date: Wed, 12 Jun 2019 11:09:54 +0200 Subject: [Agda] On termination checkers In-Reply-To: References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> Message-ID: <8BF3078C-0545-4028-8AAA-BA413303937A@labri.fr> Dear Andrew, To your question, what shall be the best sizing for (inductive) lists, experiment seems to show that the answer is none !!! I describe below the arguments with examples piled one on top of the other, the correct code being enclosed. The experiment consists in trying all discussed definitions of sized (inductive) list, dropping the pack/unpack aspects that is now irrelevant, and trying to prove some expected (easy) list?s properties. The possibilities discussed so far (given in incorrect ? piled ? Agda code) are: data SList (A : Set) : Size -> Set where ? option (1) nil : ? {i} -> SList A (? i) ? option (2) nil : ? {i} -> SList A i ? option (3) cons : ? {i} -> A -> SList A i -> SList A (? i) ? option (4) cons : ? {i}{j : Size< i} -> A -> SList A j -> SList A i But, with the associated functions : append : ? {A} -> SList A -> SList A -> SList A append nil l2 = l2 append (cons x l) l2 = cons x (append l l2) select : ? {A i} -> (A -> Bool) -> SList A i -> SList A _ select p nil = nil select p (cons x l) with (p x) ... | false = select p l ... | true = cons x (select p l) the following (expected) properties do not seem to hold: append-nil : ? {A i} -> (l : SList A i) -> append l nil ? l append-nil nil = refl append-nil (cons x l) rewrite (append-nil l) = refl ? fail with option (4) select-all : ? {A i} -> (l : SList A i) -> select (const true) l ? l select-all nil = refl ? fail with option (1) select-all (cons x l) rewrite (select-all l) = refl ? fail with option (3) with the error message ? ? != j of type Size ? in all case. Option (2) is not an issue since it must be combined with either (3) or (4). The second counter example eventually came from the (wrong) intuition that sized list with option (3) would force all functions on sized list to be size preserving. But the outcome was rather unexpected. This sounds like a bug doesn?t it ? Or this suggests that sized type are bound to be used with co-induction so that escape towards infinity is possible. In all case, my initial question on how to use helper functions in nested inductive types remains open. Best, David P.S. The unpiled correct Agda code is enclosed below. -------------- next part -------------- A non-text attachment was scrubbed... Name: SizedList.agda Type: application/octet-stream Size: 2395 bytes Desc: not available URL: -------------- next part -------------- From andrew.pitts at cl.cam.ac.uk Wed Jun 12 13:03:08 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Wed, 12 Jun 2019 12:03:08 +0100 Subject: [Agda] On termination checkers In-Reply-To: <8BF3078C-0545-4028-8AAA-BA413303937A@labri.fr> References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> <8BF3078C-0545-4028-8AAA-BA413303937A@labri.fr> Message-ID: <4BF9F6FA-E2A4-46F8-BA15-34630C8E09C7@cl.cam.ac.uk> > On 12 Jun 2019, at 10:09, david.janin at labri.fr wrote: > > Dear Andrew, > > To your question, what shall be the best sizing for (inductive) lists, > experiment seems to show that the answer is none !!! > > I describe below the arguments with examples piled one on top of the other, the > correct code being enclosed. > > The experiment consists in trying all discussed definitions of sized (inductive) > list, dropping the pack/unpack aspects that is now irrelevant, and trying to prove > some expected (easy) list?s properties. > > The possibilities discussed so far (given in incorrect ? piled ? Agda code) are: > ... > Or this suggests that sized type are bound to be used with co-induction so that > escape towards infinity is possible. I don?t think so. The way I see it is as follows. Sized types can be useful with inductive data when one has a recursive definition of a function on the data that is semantically well-defined, but which Agda?s termination check can't see as such. Some sized version of the data type (there may be several different ones!) may allow a definition of the recursive function to pass the checker and do the right thing ?at infinity?. But especially for functions of several arguments there could be many different ways (or none!) of introducing size information in the arguments and results that does the job at infinity. So in your experiments I would say it?s not so much a question of which of the data declarations (SList1, SList2 or SList3) is better, as to how to introduce sizes in your select/unchanged/append function definitions ? and that delicately depends upon their intended meaning ? there won?t be one fixed pattern of what to do (and in some cases it may be impossible). Here endeth my 2p worth. Andy From matthewdaggitt at gmail.com Wed Jun 12 13:25:35 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Wed, 12 Jun 2019 19:25:35 +0800 Subject: [Agda] On termination checkers In-Reply-To: <4BF9F6FA-E2A4-46F8-BA15-34630C8E09C7@cl.cam.ac.uk> References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> <8BF3078C-0545-4028-8AAA-BA413303937A@labri.fr> <4BF9F6FA-E2A4-46F8-BA15-34630C8E09C7@cl.cam.ac.uk> Message-ID: Hi David, I asked a *very* similar question in a recent issue on the Agda Github. You might be interested in Andreas's reply. Best, Matthew On Wed, Jun 12, 2019 at 7:03 PM Andrew Pitts wrote: > > > On 12 Jun 2019, at 10:09, david.janin at labri.fr wrote: > > > > Dear Andrew, > > > > To your question, what shall be the best sizing for (inductive) lists, > > experiment seems to show that the answer is none !!! > > > > I describe below the arguments with examples piled one on top of the > other, the > > correct code being enclosed. > > > > The experiment consists in trying all discussed definitions of sized > (inductive) > > list, dropping the pack/unpack aspects that is now irrelevant, and > trying to prove > > some expected (easy) list?s properties. > > > > The possibilities discussed so far (given in incorrect ? piled ? Agda > code) are: > > ... > > Or this suggests that sized type are bound to be used with co-induction > so that > > escape towards infinity is possible. > > I don?t think so. The way I see it is as follows. > > Sized types can be useful with inductive data when one has a recursive > definition of a function on the data that is semantically well-defined, but > which Agda?s termination check can't see as such. Some sized version of the > data type (there may be several different ones!) may allow a definition of > the recursive function to pass the checker and do the right thing ?at > infinity?. But especially for functions of several arguments there could be > many different ways (or none!) of introducing size information in the > arguments and results that does the job at infinity. So in your experiments > I would say it?s not so much a question of which of the data declarations > (SList1, SList2 or SList3) is better, as to how to introduce sizes in your > select/unchanged/append function definitions ? and that delicately depends > upon their intended meaning ? there won?t be one fixed pattern of what to > do (and in some cases it may be impossible). > > Here endeth my 2p worth. > > Andy > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From david.janin at labri.fr Wed Jun 12 14:47:13 2019 From: david.janin at labri.fr (david.janin at labri.fr) Date: Wed, 12 Jun 2019 14:47:13 +0200 Subject: [Agda] On termination checkers In-Reply-To: References: <2C072C57-D59D-4AF7-BE56-750531C52DB8@labri.fr> <2150CF72-AFED-429F-9542-2C2A0C836402@labri.fr> <8BF3078C-0545-4028-8AAA-BA413303937A@labri.fr> <4BF9F6FA-E2A4-46F8-BA15-34630C8E09C7@cl.cam.ac.uk> Message-ID: Indeed, thank you. I see Andreas point in keeping a small kernel. And as I am incapable of even touching any termination checker algorithm without breaking it, I won?t complain. But I still see no way to ? encode ? inductive list into sized inductive list (with increasing size for cons) in such a way that both append and select have a sized version AND their usual properties are satisfied? A property we could expect from sized type : to be applicable to inductive definitions and derived functions AS IF if there was no termination checker at all but the one induced by sized type argument. The error I got with the enclosed code when trying refl as final argument is: ? != j of type Size when checking that the expression refl has type consN x l ? consN x l in the three cases N = 1, 2 or 3? that is all proposed sized extensions of inductive lists (despite these extensions may sound useless and artificial indeed). By the way, the message above sounds more like a bug than anything else doesn?t it ? > Le 12 juin 2019 ? 13:25, Matthew Daggitt a ?crit : > > Hi David, > I asked a very similar question in a recent issue on the Agda Github. You might be interested in Andreas's reply. > Best, > Matthew > > On Wed, Jun 12, 2019 at 7:03 PM Andrew Pitts wrote: From herminie.pagel at gmail.com Fri Jun 14 07:50:03 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Fri, 14 Jun 2019 07:50:03 +0200 Subject: [Agda] How to make chain of reasoning explicit in Agda Message-ID: Hi Agda Community, when viewing the normalized goal of a given clause, i am wondering how to get the reasoning steps that Agda performs to decuce the current goal from the initial result to be proven. More precisely, which definitionally equalities and syntactic precedences are being applied, in which order and the resulting intermediate expressions that lead to the current goal shown by C-c C-. in a given hole. best, herminie -------------- next part -------------- An HTML attachment was scrubbed... URL: From xqi01 at cs.tufts.edu Mon Jun 17 10:20:28 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Mon, 17 Jun 2019 01:20:28 -0700 Subject: [Agda] Programming with well-founded/sized recursion Message-ID: Hello, One of my current Agda developments involve some kind of well- founded/measure-based recursion. The original development was in Coq, where I used measure-based termination. Now, as I transcribe my code to Agda, what should I use to prove termination to the termination checker ? The data structure I am operating on is a tree, and the termination proof is just by induction on size. Sized types seem like a good choice for what I want, but it's hard to find resources to get me started. Are there any pointers or examples (besides the manual)? Alternatively, are there combinators that can help me define this kind of recursion using accessibility predicates? Which would be the preferred solution if I want to compile my code eventually? Thanks, Xuanrui From Filippo.Sestini at nottingham.ac.uk Mon Jun 17 11:50:47 2019 From: Filippo.Sestini at nottingham.ac.uk (Filippo Sestini) Date: Mon, 17 Jun 2019 09:50:47 +0000 Subject: [Agda] Programming with well-founded/sized recursion In-Reply-To: References: Message-ID: <29658348-C609-41F7-81C6-D43B11665429@nottingham.ac.uk> Hi, I believe the closest Agda equivalent to Coq?s measure-based termination is well-founded induction. You can find the machinery for it in the standard library [1]. However, I agree that in your case sized types could be a better option. There?s a worked out example in the docs that might help you get started [2]. [1] https://github.com/agda/agda-stdlib/blob/master/src/Induction/WellFounded.agda [2] https://agda.readthedocs.io/en/v2.6.0.1/language/sized-types.html Cheers -- Filippo Sestini http://www.cs.nott.ac.uk/~psxfs5/ > On Jun 17, 2019, at 9:20 AM, Xuanrui Qi wrote: > > Hello, > > One of my current Agda developments involve some kind of well- > founded/measure-based recursion. The original development was in Coq, > where I used measure-based termination. Now, as I transcribe my code to > Agda, what should I use to prove termination to the termination checker > ? > > The data structure I am operating on is a tree, and the termination > proof is just by induction on size. Sized types seem like a good choice > for what I want, but it's hard to find resources to get me started. Are > there any pointers or examples (besides the manual)? Alternatively, are > there combinators that can help me define this kind of recursion using > accessibility predicates? > > Which would be the preferred solution if I want to compile my code > eventually? > > Thanks, > Xuanrui > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From chisvasileandrei at gmail.com Mon Jun 17 15:52:13 2019 From: chisvasileandrei at gmail.com (Andrei Chis) Date: Mon, 17 Jun 2019 15:52:13 +0200 Subject: [Agda] SLE 2019: Final Call for Papers - Deadline Extension; Athens, Greece; October 21-22 Message-ID: ------------------------------------------------------------------------ Call for Papers: 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019) co-located with SPLASH 2019 Athens, Greece October 21-22, 2019 https://conf.researchr.org/home/sle-2019 http://www.sleconf.org/2019 Follow us on twitter: https://twitter.com/sleconf --------------------------- IMPORTANT DATES --------------------------- Deadlines have been extended by one week from the earlier announcements: * Abstract Submission: June 21, 2019 * Paper Submission: June 28, 2019 * Author Notification: August 9, 2019 ------------------------------------------------------------------------ We are pleased to invite you to submit papers to the 12th ACM SIGPLAN International Conference on Software Language Engineering (SLE 2019), held in conjunction with SPLASH 2019 at Athens, Greece on October 21-22, 2019. --------------------------- Topics of Interest --------------------------- SLE 2019 solicits high-quality contributions in areas ranging from theoretical and conceptual contributions, to tools, techniques, and frameworks in the domain of software language engineering. Topics relevant to SLE cover generic aspects of software languages development rather than aspects of engineering a specific language. In particular, SLE is interested in contributions from the following areas: * Software Language Design and Implementation - Approaches to and methods for language design - Static semantics (e.g., design rules, well-formedness constraints) - Techniques for specifying behavioral / executable semantics - Generative approaches (incl. code synthesis, compilation) - Meta-languages, meta-tools, language workbenches * Software Language Validation - Verification and formal methods for languages - Testing techniques for languages - Simulation techniques for languages * Software Language Integration and Composition - Coordination of heterogeneous languages and tools - Mappings between languages (incl. transformation languages) - Traceability between languages - Deployment of languages to different platforms * Software Language Maintenance - Software language reuse - Language evolution - Language families and variability * Domain-specific approaches for any aspects of SLE (design, implementation, validation, maintenance) * Empirical evaluation and experience reports of language engineering tools - User studies evaluating usability - Performance benchmarks - Industrial applications --------------------------- Types of Submissions --------------------------- SLE 2019 solicits three types of contributions: Research Papers, Tools Papers, and New Ideas/Vision papers. * Research papers These should report a substantial research contribution to SLE or successful application of SLE techniques or both. Full paper submissions must not exceed 12 pages, excluding bibliography. * Tool papers Because of SLE?s interest in tools, we seek papers that present software tools related to the field of SLE. Selection criteria include originality of the tool, its innovative aspects, and relevance to SLE. Any of the SLE topics of interest are appropriate areas for tool demonstrations. Submissions must provide a tool description of 4 pages excluding bibliography, and a demonstration outline including screenshots of up to 6 pages. Tool demonstrations must have the keywords ?Tool Demo? or ?Tool Demonstration? in the title. The 4-page tool description will, if the demonstration is accepted, be published in the proceedings. The 6-page demonstration outline will be used by the program committee only for evaluating the submission. *New ideas / vision papers New ideas papers should describe new, non-conventional SLE research approaches that depart from standard practice. They are intended to describe well-defined research ideas that are at an early stage of investigation. Vision papers are intended to present new unifying theories about existing SLE research that can lead to the development of new technologies or approaches. New ideas / vision papers must not exceed 4 pages, excluding bibliography. *Workshops Workshops will be organized by SPLASH. Please inform us and contact the SPLASH organizers if you would like to organize a workshop of interest to the SLE audience. Information on how to submit workshops can be found at the SPLASH 2019 Website. --------------------------- Artifact Evaluation --------------------------- SLE will continue to use an evaluation process for assessing the quality of the artifacts on which papers are based to foster the culture of experimental reproducibility. Authors of accepted papers are invited to submit artifacts. For more information, please have a look at the Artifact Evaluation page. --------------------------- Submission Details --------------------------- Paper Format: Submissions must conform to the ACM SIGPLAN Conference Format ?acmart?; please make sure that you always use the latest ACM SIGPLAN acmart LaTeX template, and that the document class definition is \documentclass[sigplan,anonymous,review]{acmart}. Do not make any changes to this format! Using the Word template is strongly discouraged. Ensure that your submission is legible when printed on a black and white printer. In particular, please check that colors remain distinct and font sizes in figures and tables are legible. To increase fairness in reviewing, a double-blind review process has become standard across SIGPLAN conferences. For the first time, SLE will follow the double-blind process. Author names and institutions should be omitted from submitted papers, and references to the authors? own related work should be in the third person. No other changes are necessary, and authors will not be penalized if reviewers are able to infer their identities in implicit ways. All submissions must be in PDF format. Concurrent Submissions: Papers must describe unpublished work that is not currently submitted for publication elsewhere as described by SIGPLAN?s Republication Policy. Submitters should also be aware of ACM?s Policy and Procedures on Plagiarism. Submissions that violate these policies will be desk-rejected. Submission Site: Submissions will be accepted at https://sle19.hotcrp.com/ --------------------------- Reviewing Process --------------------------- All submitted papers will be reviewed by at least three members of the program committee. Research papers and tool papers will be evaluated concerning novelty, correctness, significance, readability, and alignment with the conference call. New ideas / vision papers will be evaluated primarily concerning novelty, significance, readability, and alignment with the conference call. For fairness reasons, all submitted papers must conform to the above instructions. Submissions that violate these instructions may be rejected without review, at the discretion of the PC chairs. --------------------------- Awards --------------------------- * Distinguished paper: Award for most notable paper, as determined by the PC chairs based on the recommendations of the programme committee. * Distinguished reviewer: Award for distinguished reviewer, as determined by the PC chairs. * Distinguished artifact: Award for the artifact most significantly exceeding expectations, as determined by the AEC chairs based on the recommendations of the artifact evaluation committee. --------------------------- Publication --------------------------- All accepted papers will be published in the ACM Digital Library. AUTHORS TAKE NOTE: The official publication date is the date the proceedings are made available in the ACM Digital Library. This date may be up to two weeks prior to the first day of the conference. The official publication date affects the deadline for any patent filings related to published work. --------------------------- Organisation --------------------------- Chairs: * General chair: Oscar Nierstrasz (University of Bern, Switzerland) * Program co-chair: Bruno Oliveira (University of Hong Kong, China) * Program co-chair: Jeff Gray (University of Alabama, USA) * Artefact Evaluation co-chair: Emma S?derberg (Lund University, Sweden) * Artefact Evaluation co-chair: Abel Gomez (Universitat Oberta de Catalunya, Spain) Program Committee: Xuan Bi (Standard Chartered Bank) Erwan Bousse (TU Wien) Loli Burgeuno (Open University of Catalonia) Marsha Chechik (University of Toronto) Matteo Cimini (University of Massachusetts, Lowell) Thomas Degueule (CWI) Juan de Lara (Universidad Aut?noma de Madrid) Juergen Dingel (Queen's University) Romina Eramo (University of L'Aquila) Sebastian Gerard (CEA) Paolo Giarusso (TU Delft) Esther Guerra (Universidad Aut?noma de Madrid) Pablo Inostroza (CWI) Dimitris Kolovos (University of York) Marjan Mernik (University of Maribor) Alfonso Pierantonio (University of L'Aquila) Jaroslav Porub?n (University of Ko?ice) Casper Poulsen (TU Delft) Yann Regis-Gianas (Paris 7/INRIA) Bernhard Rumpe (RWTH Aachen University) Markus Schordan (Lawrence Livermore National Laboratory) Neil Sculthorpe (Nottingham Trent University) Marco Servetto (Victoria University of Wellington) Elizabeth Scott (Royal Holloway) Eugene Syriani (University of Montreal) Ulyana Tikhonova (CWI) Juha-Pekka Tolvanen (MetaCase) Antonio Valecillo (University of Malaga) Mark van den Brand (TU Eindhoven) Vadim Zaytsev (Raincode Labs) Tian Zhang (Nanjing University) --------------------------- Contact --------------------------- For additional information, clarification, or answers to questions, please contact the organizers by email (bruno at cs.hku.hk and gray at cs.ua.edu) -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Tue Jun 18 14:03:28 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Tue, 18 Jun 2019 15:03:28 +0300 Subject: [Agda] Selectively capturing variables from the exterior context.(?) Message-ID: Let us assume that we have parameterized containers, and we can have containers withing containers of possibly different parameters. I would like that the interior container only be able to capture a variable x from the external container if they have the same parameter. I could simply define the interior container as a top level function, but that would make the code less readable. It would also block the ability to capture variables when we have 3 nested containers where the first and the third have the same parameters. I am inclining in using reflection to introduce those restrictions, but maybe there is an easier way out. -------------- next part -------------- An HTML attachment was scrubbed... URL: From psperatto at vera.com.uy Sat Jun 22 17:00:24 2019 From: psperatto at vera.com.uy (Patricia Peratto) Date: Sat, 22 Jun 2019 12:00:24 -0300 (UYT) Subject: [Agda] Fwd: Programming with well-founded/sized recursion In-Reply-To: <1558367125.1532960.1560784498426.JavaMail.zimbra@vera.com.uy> References: <1558367125.1532960.1560784498426.JavaMail.zimbra@vera.com.uy> Message-ID: <281752115.1792277.1561215624517.JavaMail.zimbra@vera.com.uy> My paper Well-founded relations in Type Theory published in Logic Journal of the IGPL Volume 5, Issue 6, November 1997 Pages 811-852 defines different well-founded relations in Martin-Lof's type theory. Implements them in Alf. I hope it helps. Patricia. ----- Mensaje original ----- De: "Xuanrui Qi" Para: agda at lists.chalmers.se Enviados: Lunes, 17 de Junio 2019 5:20:28 Asunto: [Agda] Programming with well-founded/sized recursion Hello, One of my current Agda developments involve some kind of well- founded/measure-based recursion. The original development was in Coq, where I used measure-based termination. Now, as I transcribe my code to Agda, what should I use to prove termination to the termination checker ? The data structure I am operating on is a tree, and the termination proof is just by induction on size. Sized types seem like a good choice for what I want, but it's hard to find resources to get me started. Are there any pointers or examples (besides the manual)? Alternatively, are there combinators that can help me define this kind of recursion using accessibility predicates? Which would be the preferred solution if I want to compile my code eventually? Thanks, Xuanrui _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda From Graham.Hutton at nottingham.ac.uk Mon Jun 24 13:38:19 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Mon, 24 Jun 2019 11:38:19 +0000 Subject: [Agda] Multiple Assistant/Associate Professorships in Nottingham (deadline 8th July 2019) Message-ID: Dear all, As part of a strategic expansion, the School of Computer Science at the University of Nottingham is seeking to make multiple new appointments at the Assistant or Associate Professor level: https://tinyurl.com/y4qfdqps https://tinyurl.com/y2uw6tsa Applications in the area of the Functional Programming (FP) lab are strongly encouraged! The FP lab is keen to receive applications from candidates with an excellent publication record (e.g. papers in leading venues such as LICS, POPL, ICFP, JFP, TOPLAS, etc) and the ability to secure external funding to support their research. Further information about the FP lab is available from: https://tinyurl.com/y2ekdkqa The deadline for applications is Monday 8th July 2019. The advert mentions some specific research areas, but the positions are open to applicants from any area of Computer Science. Best wishes, Graham Hutton Thorsten Altenkirch This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From wadler at inf.ed.ac.uk Mon Jun 24 23:05:33 2019 From: wadler at inf.ed.ac.uk (Philip Wadler) Date: Mon, 24 Jun 2019 18:05:33 -0300 Subject: [Agda] Recursive definitions over lists Message-ID: Consider the following code. \begin{code} module Tree where open import Data.List using (List; []; _?_; map) open import Data.List.All using (All; []; _?_) data Tree (A : Set) : Set where node : List (Tree A) ? Tree A mapTree : ? {A B : Set} ? (A ? B) ? Tree A ? Tree B mapTree f (node ts) = node (map (mapTree f) ts) mapTree? : ? {A B : Set} ? (A ? B) ? Tree A ? Tree B mapForest? : ? {A B : Set} ? (A ? B) ? List (Tree A) ? List (Tree B) mapTree? f (node ts) = node (mapForest? f ts) mapForest? f [] = [] mapForest? f (t ? ts) = mapTree? f t ? mapForest? f ts data AllTree {A : Set} (P : A ? Set) : Tree A ? Set where node : ? {ts : List (Tree A)} ? All (AllTree P) ts ------------------- ? AllTree P (node ts) \end{code} Agda complains that the first definition of mapTree may not terminate. Termination checking failed for the following functions: mapTree Problematic calls: mapTree f (at /Users/wadler/Desktop/Tree.lagda:11,38-45) I guess this is because it is not quite clever enough to figure out that in the definition of (mapTree (node ts)) that the recursive invocation (mapTree f) is in fact always applied to a substructure of ts. One way to get Agda to accept the definition is to rewrite it as two mutually recursive functions, one of which expands the definition of map. Is this the recommend way to solve the problem, or is there a better alternative? I'm surprised to note that Agda does not make a similar complaint about the definition of AllTree. Why not? Cheers, -- P . \ Philip Wadler, Professor of Theoretical Computer Science, . /\ School of Informatics, University of Edinburgh . / \ and Senior Research Fellow, IOHK . http://homepages.inf.ed.ac.uk/wadler/ -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: Tree.lagda Type: application/octet-stream Size: 1661 bytes Desc: not available URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: not available URL: From icfp.publicity at googlemail.com Mon Jun 24 23:12:47 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Mon, 24 Jun 2019 17:12:47 -0400 Subject: [Agda] Call for Participation: ICFP 2019 Message-ID: <5d113ccfcf72b_25202adb8252c5b483c@homer.mail> ===================================================================== Call for Participation ICFP 2019 24th ACM SIGPLAN International Conference on Functional Programming and affiliated events August 18 - August 23, 2019 Berlin, Germany http://icfp19.sigplan.org/ Early Registration until July 18! ===================================================================== ICFP provides a forum for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. The conference covers the entire spectrum of work, from practice to theory, including its peripheries. This year, ICFP is co-located with BOBKonf! * Overview and affiliated events: http://icfp19.sigplan.org/home * Program: http://icfp19.sigplan.org/program/program-icfp-2019 * Accepted papers: http://icfp19.sigplan.org/track/icfp-2019-papers * Registration is available via: https://regmaster4.com/2019conf/ICFP19/register.php Early registration ends 18 July, 2019. * Programming contest: https://icfpcontest2019.github.io/ * Student Research Competition: https://icfp19.sigplan.org/track/icfp-2019-Student-Research-Competition * Follow us on Twitter for the latest news: http://twitter.com/icfp_conference In addition to BOBKonf (8/21), there are several events co-located with ICFP: * Erlang Workshop (8/18) * Functional Art, Music, Modeling and Design (8/23) * Functional High-Performance and Numerical Computing (8/18) * Haskell Implementors' Workshop (8/23) * Haskell Symposium (8/22-8/23) * miniKanren Workshop (8/22) * ML Family Workshop (8/22) * OCaml Workshop (8/23) * Programming Languages Mentoring Workshop (8/18) * Scheme Workshop (8/18) * Type-Driven Development (8/18) ### ICFP Organizers General Chair: Derek Dreyer (MPI-SWS, Germany) Artifact Evaluation Co-Chairs: Simon Marlow (Facebook, UK) Industrial Relations Chair: Alan Jeffrey (Mozilla Research, USA) Programming Contest Organiser: Ilya Sergey (Yale-NUS College, Singapore) Publicity and Web Chair: Sam Tobin-Hochstadt (Indiana University, USA) Student Research Competition Chair: William J. Bowman (University of British Columbia, Canada) Workshops Co-Chair: Christophe Scholliers (Universiteit Gent, Belgium) Jennifer Hackett (University of Nottingham, UK) Conference Manager: Annabel Satin (P.C.K.) ### PACMPL Volume 3, Issue ICFP 2019 Principal Editor: Fran?ois Pottier (Inria, France) Review Committee: Lennart Beringer (Princeton University, United States) Joachim Breitner (DFINITY Foundation, Germany) Laura M. Castro (University of A Coru?a, Spain) Ezgi ?i?ek (Facebook London, United Kingdom) Pierre-Evariste Dagand (LIP6/CNRS, France) Christos Dimoulas (Northwestern University, United States) Jacques-Henri Jourdan (CNRS, LRI, Universit? Paris-Sud, France) Andrew Kennedy (Facebook London, United Kingdom) Daan Leijen (Microsoft Research, United States) Kazutaka Matsuda (Tohoku University, Japan) Bruno C. d. S. Oliveira (University of Hong Kong, China) Klaus Ostermann (University of T?bingen, Germany) Jennifer Paykin (Galois, United States) Frank Pfenning (Carnegie Mellon University, USA) Mike Rainey (Indiana University, USA) Chung-chieh Shan (Indiana University, USA) Sam Staton (University of Oxford, UK) Pierre-Yves Strub (Ecole Polytechnique, France) German Vidal (Universitat Politecnica de Valencia, Spain) External Review Committee: Michael D. Adams (University of Utah, USA) Robert Atkey (University of Strathclyde, IK) Sheng Chen (University of Louisiana at Lafayette, USA) James Cheney (University of Edinburgh, UK) Adam Chlipala (Massachusetts Institute of Technology, USA) Evelyne Contejean (LRI, Universit? Paris-Sud, France) Germ?n Andr?s Delbianco (IRIF, Universit? Paris Diderot, France) Dominique Devriese (Vrije Universiteit Brussel, Belgium) Richard A. Eisenberg (Bryn Mawr College, USA) Conal Elliott (Target, USA) Sebastian Erdweg (Delft University of Technology, Netherlands) Michael Greenberg (Pomona College, USA) Adrien Guatto (IRIF, Universit? Paris Diderot, France) Jennifer Hackett (University of Nottingham, UK) Troels Henriksen (University of Copenhagen, Denmark) Chung-Kil Hur (Seoul National University, Republic of Korea) Roberto Ierusalimschy (PUC-Rio, Brazil) Ranjit Jhala (University of California, San Diego, USA) Ralf Jung (MPI-SWS, Germany) Ohad Kammar (University of Oxford, UK) Oleg Kiselyov (Tohoku University, Japan) Hsiang-Shang ?Josh? Ko (National Institute of Informatics, Japan) Ond?ej Lhot?k (University of Waterloo, Canada) Dan Licata (Wesleyan University, USA) Geoffrey Mainland (Drexel University, USA) Simon Marlow (Facebook, UK) Akimasa Morihata (University of Tokyo, Japan) Shin-Cheng Mu (Academia Sinica, Taiwan) Guillaume Munch-Maccagnoni (Inria, France) Kim Nguy?n (University of Paris-Sud, France) Ulf Norell (Gothenburg University, Sweden) Atsushi Ohori (Tohoku University, Japan) Rex Page (University of Oklahoma, USA) Zoe Paraskevopoulou (Princeton University, USA) Nadia Polikarpova (University of California, San Diego, USA) Jonathan Protzenko (Microsoft Research, USA) Tiark Rompf (Purdue University, USA) Andreas Rossberg (Dfinity, Germany) KC Sivaramakrishnan (University of Cambridge, UI) Nicholas Smallbone (Chalmers University of Technology, Sweden) Matthieu Sozeau (Inria, France) Sandro Stucki (Chalmers | University of Gothenburg, Sweden) Don Syme (Microsoft, UK) Zachary Tatlock (University of Washington, USA) Sam Tobin-Hochstadt (Indiana University, USA) Takeshi Tsukada (University of Tokyo, Japan) Tarmo Uustalu (Reykjavik University, Iceland) Benoit Valiron (LRI, CentraleSupelec, Univ. Paris Saclay, France) Daniel Winograd-Cort (University of Pennsylvania, USA) Nicolas Wu (University of Bristol, UK) From gallais at cs.ru.nl Tue Jun 25 10:58:03 2019 From: gallais at cs.ru.nl (Guillaume Allais) Date: Tue, 25 Jun 2019 09:58:03 +0100 Subject: [Agda] Recursive definitions over lists In-Reply-To: References: Message-ID: <7c69567f-b03b-5ceb-007d-3489bf8310f5@cs.ru.nl> Hi Phil, First of all the code-free answer: AllTree is accepted because Agda recorded internally that `All`'s first argument was only ever used in a strictly positive manner. It is therefore legal to take the fixpoint of that definition. Regarding the definition of mapTree, the problem is the level of indirection introduced by `map`: it is not obvious for Agda that the partially applied recursive call `mapTree f` will only ever be used on subterms. As you have observed, inlining `map` is a possible solution to remove this level of indirection. Another one is to start using sized types so that the notion of being a subterm becomes a type-level one. Cf. this recent discussion on the mailing list: https://lists.chalmers.se/pipermail/agda/2019/011209.html and in particular this message with code for a similar sized inductive type: https://lists.chalmers.se/pipermail/agda/2019/011212.html Cheers, -- gallais On 24/06/2019 22:05, Philip Wadler wrote: > Consider the following code. > > \begin{code} > module Tree where > > open import Data.List using (List; []; _?_; map) > open import Data.List.All using (All; []; _?_) > > data Tree (A : Set) : Set where > node : List (Tree A) ? Tree A > > mapTree : ? {A B : Set} ? (A ? B) ? Tree A ? Tree B > mapTree f (node ts) = node (map (mapTree f) ts) > > mapTree? : ? {A B : Set} ? (A ? B) ? Tree A ? Tree B > mapForest? : ? {A B : Set} ? (A ? B) ? List (Tree A) ? List (Tree B) > > mapTree? f (node ts) = node (mapForest? f ts) > mapForest? f [] = [] > mapForest? f (t ? ts) = mapTree? f t ? mapForest? f ts > > data AllTree {A : Set} (P : A ? Set) : Tree A ? Set where > node : ? {ts : List (Tree A)} > ? All (AllTree P) ts > ------------------- > ? AllTree P (node ts) > \end{code} > > Agda complains that the first definition of mapTree may not terminate. > > Termination checking failed for the following functions: > mapTree > Problematic calls: > mapTree f > (at /Users/wadler/Desktop/Tree.lagda:11,38-45) > > I guess this is because it is not quite clever enough to figure out that in > the definition of (mapTree (node ts)) that the recursive invocation > (mapTree f) is in fact always applied to a substructure of ts. > > One way to get Agda to accept the definition is to rewrite it as two > mutually recursive functions, one of which expands the definition of map. > Is this the recommend way to solve the problem, or is there a better > alternative? > > I'm surprised to note that Agda does not make a similar complaint about the > definition of AllTree. Why not? > > Cheers, -- P > > . \ Philip Wadler, Professor of Theoretical Computer Science, > . /\ School of Informatics, University of Edinburgh > . / \ and Senior Research Fellow, IOHK > . http://homepages.inf.ed.ac.uk/wadler/ > > > The University of Edinburgh is a charitable body, registered in > Scotland, with registration number SC005336. > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From Thorsten.Altenkirch at nottingham.ac.uk Tue Jun 25 11:07:44 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Tue, 25 Jun 2019 09:07:44 +0000 Subject: [Agda] Types summer school 2019 at lake Ohrid Message-ID: <47799ECA-6871-42CA-B25E-6BEDE3A6A633@nottingham.ac.uk> COST action CA15123 EUTYPES Summer School on Types for Programming and Verification Ohrid, Macedonia, 30 August ? 4 September 2019 https://sites.google.com/view/2019eutypesschool/home CALL FOR APPLICATIONS BACKGROUND Types are pervasive in programming and information technology. A type defines a formal interface between software components, allowing the automatic verification of their connections, and greatly enhancing the robustness and reliability of computations and communications. In rich dependent type theories, the full functional specification of a program can be expressed as a type. Type systems have rapidly evolved over the past years, becoming more sophisticated, capturing new aspects of the behaviour of programs and the dynamics of their execution. The aim of this summer school is to provide advanced training, especially to PhD students and early-career researchers, in all aspects of the theory and practice of type theory and applications. LECTURERS AND COURSES ? Course 1: Hugo Herbelin: Introduction to lambda calculus & type theory ? ? Course 2: Jesper Coeckx: Correct-by-construction programming in Agda ? ? Course 3 : Yves Bertot: Introductory course on Coq/Gallina ? ? Course 4 : Xavier Leroy: Proving the correctness of a compiler ? ? Course 5: Nicolai Kraus: Introduction to homotopy type theory ? APPLICATION The capacity of the summer school is up to 40 students. ? Accommodation, full board (i.e., including all meals): 5 nights @ ?35 = ? 175. Extra nights cost also ?35. ? A maximum of 30 students (PhD students / early-career researchers) from countries involved in EUTYPES can receive a grant from the COST action to partially cover their costs. To apply for a place in the school and a grant, please fill out (as soon as possible) the form at http://tiny.cc/olbq8y Application deadline: 15 July 2019. Notification of acceptance and funding: continuously, at the latest by 22 July 2019. VENUE Ohrid is a small town on Lake Ohrid in Macedonia, southwest of Skopje. Ohrid is notable for once having had 365 churches, one for each day of the year, and has been referred to as the Jerusalem of the Balkans. Ohrid and Lake Ohrid are on UNESCO's lists of cultural and natural World Heritage sites. The school will be held in the Congress Centre of Ohrid, which is also the accommodation site. TRAVEL Most participants will have to fly to Skopje and then get to Ohrid by bus. WizzAir operates direct flights to Ohrid from Basel-Mulhouse-Freiburg and London Luton. ORGANIZERS Thorsten Altenkirch Herman Geuvers, Marija Mihova This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From bernardobruno at gmail.com Tue Jun 25 16:45:27 2019 From: bernardobruno at gmail.com (Bruno Bernardo) Date: Tue, 25 Jun 2019 16:45:27 +0200 Subject: [Agda] (Extended deadline) Formal Methods 2019 - 1st Workshop on Formal Methods for Blockchains, CFP Message-ID: [ Please distribute, apologies for multiple postings. ] ========================================================== 1st Workshop on Formal Methods for Blockchains (FMBC) 2019 https://sites.google.com/view/fmbc/home Porto, Portugal, October 11 Part of the 3rd World Congress on Formal Methods http://formalmethods2019.inesctec.pt/ ------------------------------------------------------------- IMPORTANT DATES -------------------------------- Abstract submission: June 30, 2019 (extended) Full paper submission: July 7, 2019 (extended) Notification: July 31, 2019 Camera-ready: September 2, 2019 Conference: October 11, 2019 -------------------------------- -------------------------------- TOPICS OF INTEREST -------------------------------- Blockchains are decentralized transactional ledgers that rely on cryptographic hash functions for guaranteeing the integrity of the stored data. Participants on the network reach agreement on what valid transactions are through consensus algorithms. Blockchains may also provide support for Smart Contracts. Smart Contracts are scripts of an ad-hoc programming language that are stored in the blockchain and that run on the network. They can interact with the ledger?s data and update its state. These scripts can express the logic of possibly complex contracts between users of the blockchain. Thus, Smart Contracts can facilitate the economic activity of blockchain participants. With the emergence and increasing popularity of cryptocurrencies such as Bitcoin and Ethereum, it is now of utmost importance to have strong guarantees of the behavior of blockchain so ware. These guarantees can be brought by using Formal Methods. Indeed, Blockchain software encompasses many topics of computer science where using Formal Methods techniques and tools are relevant: consensus algorithms to ensure the liveness and the security of the data on the chain, programming languages specifically designed to write smart contracts, cryptographic protocols, such as zero-knowledge proofs, used to ensure privacy, etc. This workshop is a forum to identify theoretical and practical approaches of formal methods for blockchain technology. Topics include, but are not limited to: * Design and implementation of Smart Contract languages * Formal models of blockchain applications or concepts * Formal methods for consensus protocols * Formal methods for blockchain-specific cryptographic primitives or ? protocols Formal languages for Smart * Verification of Smart Contracts -------------------------------- -------------------------------- SUBMISSION -------------------------------- Submit original manuscripts (not published or considered elsewhere) with a maximum of twelve pages (regular papers), six pages (short papers), and two pages (extended abstract) describing new and emerging ideas or summarizing existing work). Each paper should include a title and the name and affiliation of each author. Authors of selected extended-abstracts are invited to give a short lightning talk of up to 15 minutes. At least one author of an accepted paper is expected to present the paper at the workshop as a registered participant. All accepted contributions will be reviewed once more by the program committee after the workshop and before being included in the post-proceedings. submission link https://easychair.org/conferences/?conf=fmbc19 -------------------------------- -------------------------------- PROCEEDINGS -------------------------------- All submissions will be peer-reviewed by at least three members of the program committee for quality and relevance. Accepted regular papers (full and short papers) will be included in the FM workshop post-proceedings, published as a volume of the Lecture Notes in Computer Science (LNCS) by Springer. -------------------------------- -------------------------------- INVITED SPEAKER --------------------------------------------------------------------------------------------------------- Ilya Sergey - Associate Professor at Yale-NUS College and NUS School of Computing, (Singapore). --------------------------------------------------------------------------------------------------------- -------------------------------- -------------------------------- PROGRAM committee -------------------------------- Program Chairs Bruno Bernardo (bruno at nomadic-labs.com ) N?stor Cata?o (nestor.catano at gmail.com ) Diego Marmsoler (diego.marmsoler at tum.de ) Program Committee Pietro Abate (Nomadic Labs, France) Ijaz Ahmed (University of Madeira, Portuga) Jonathan Aldrich (Carnegie Mellon University, USA) Bernhard Beckert (Karlsruhe Institute of Technology, Germany) Bruno Bernardo (Nomadic Labs, France) Sukriti Bhattacharya (LIST, Luxembourg) N?stor Cata?o (Universidad del Norte, Colombia) Maria Christakis (MPI-SWS, Germany) L?a-Zaynah Dargaye (CEA LIST, France) Georges Gonthier (Inria, France) Neville Grech (University of Athens, Greece / University of Malta, Malta) Davide Grossi (University of Groningen, Netherlands) Sorren Hanvey (Liverpool John Moores University, UK) Andreas Lochbihler (Digital Asset, Swiss) Diego Marmsoler (Technische Universitat Munchen, Germany) Anastasia Mavridou (NASA Ames, USA) Sim?o Melo de Sousa (Universidade da Beira Interior, Portugal) Fabio Mogavero (Universit? degli Studi di Napoli, Italy) Peter Csaba ?lveczky (University of Oslo, Norway) Karl Palmskog (University of Texas at Austin, USA) Vincent Rahli (University of Luxembourg, Luxembourg) Steve Reeves (University of Waikato, New Zealand) Camilo Rueda (Pontificia Universidad Javeriana, Colombia) Claudio Russo (Dfinity Foundation, USA) Jorge Sousa Pinto (Universidade do Minho, Portugal) Bas Spitters (Aarhus University, Denmark) Christoph Sprenger (ETH, Z?rich) Mark Staples (Data61, Australia) Philip Wadler (University of Edinburgh / IOHK, UK) Xi Wu (The University of Queensland, Australia) Santiago Zanella-Beguelin (Microsoft Research Cambridge, UK) -------------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From wadler at inf.ed.ac.uk Tue Jun 25 17:41:08 2019 From: wadler at inf.ed.ac.uk (Philip Wadler) Date: Tue, 25 Jun 2019 12:41:08 -0300 Subject: [Agda] Recursive definitions over lists In-Reply-To: <7c69567f-b03b-5ceb-007d-3489bf8310f5@cs.ru.nl> References: <7c69567f-b03b-5ceb-007d-3489bf8310f5@cs.ru.nl> Message-ID: Thanks! AllTree is accepted because Agda recorded > internally that `All`'s first argument was only ever used in a strictly > positive manner. It is therefore legal to take the fixpoint of that > definition. Can you say more about how this works, or where I can read up on it? Why is All strictly positive but map is not? Cheers, -- P On Tue, 25 Jun 2019 at 05:58, Guillaume Allais wrote: > Hi Phil, > > First of all the code-free answer: AllTree is accepted because Agda > recorded > internally that `All`'s first argument was only ever used in a strictly > positive manner. It is therefore legal to take the fixpoint of that > definition. > > Regarding the definition of mapTree, the problem is the level of > indirection > introduced by `map`: it is not obvious for Agda that the partially applied > recursive call `mapTree f` will only ever be used on subterms. > As you have observed, inlining `map` is a possible solution to remove this > level of indirection. Another one is to start using sized types so that the > notion of being a subterm becomes a type-level one. > > Cf. this recent discussion on the mailing list: > https://lists.chalmers.se/pipermail/agda/2019/011209.html > > and in particular this message with code for a similar sized inductive > type: > https://lists.chalmers.se/pipermail/agda/2019/011212.html > > Cheers, > -- > gallais > > On 24/06/2019 22:05, Philip Wadler wrote: > > Consider the following code. > > > > \begin{code} > > module Tree where > > > > open import Data.List using (List; []; _?_; map) > > open import Data.List.All using (All; []; _?_) > > > > data Tree (A : Set) : Set where > > node : List (Tree A) ? Tree A > > > > mapTree : ? {A B : Set} ? (A ? B) ? Tree A ? Tree B > > mapTree f (node ts) = node (map (mapTree f) ts) > > > > mapTree? : ? {A B : Set} ? (A ? B) ? Tree A ? Tree B > > mapForest? : ? {A B : Set} ? (A ? B) ? List (Tree A) ? List (Tree B) > > > > mapTree? f (node ts) = node (mapForest? f ts) > > mapForest? f [] = [] > > mapForest? f (t ? ts) = mapTree? f t ? mapForest? f ts > > > > data AllTree {A : Set} (P : A ? Set) : Tree A ? Set where > > node : ? {ts : List (Tree A)} > > ? All (AllTree P) ts > > ------------------- > > ? AllTree P (node ts) > > \end{code} > > > > Agda complains that the first definition of mapTree may not terminate. > > > > Termination checking failed for the following functions: > > mapTree > > Problematic calls: > > mapTree f > > (at /Users/wadler/Desktop/Tree.lagda:11,38-45) > > > > I guess this is because it is not quite clever enough to figure out that > in > > the definition of (mapTree (node ts)) that the recursive invocation > > (mapTree f) is in fact always applied to a substructure of ts. > > > > One way to get Agda to accept the definition is to rewrite it as two > > mutually recursive functions, one of which expands the definition of map. > > Is this the recommend way to solve the problem, or is there a better > > alternative? > > > > I'm surprised to note that Agda does not make a similar complaint about > the > > definition of AllTree. Why not? > > > > Cheers, -- P > > > > . \ Philip Wadler, Professor of Theoretical Computer Science, > > . /\ School of Informatics, University of Edinburgh > > . / \ and Senior Research Fellow, IOHK > > . http://homepages.inf.ed.ac.uk/wadler/ > > > > > > The University of Edinburgh is a charitable body, registered in > > Scotland, with registration number SC005336. > > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: not available URL: From herminie.pagel at gmail.com Tue Jun 25 21:10:09 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Tue, 25 Jun 2019 21:10:09 +0200 Subject: [Agda] Type of Natural numbers representations Message-ID: Hi, when constructing the different unary, binary, ternary... types that represent the natural numbers it seems that both the constructors and the increment operator follow a pattern. https://gist.github.com/pnlph/3f6aca8dea4ba570abcb461b37ae14cb Is it possible or makes sense defining this pattern in Agda as a type of natural numbers representations, say Nr, indexed on the natural numbers themselves so that Nr 1 = N, Nr 2 = Bin, Nr 3 = Ter, ..., Nr 10 = Dec,...? best, herminie -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Tue Jun 25 21:26:38 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Tue, 25 Jun 2019 19:26:38 +0000 Subject: [Agda] Type of Natural numbers representations In-Reply-To: References: Message-ID: Hi Herminie, If I read you correctly, I think it is the case that `Nr n = List (Fin n)`. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of Herminie Pagel Sent: June 25, 2019 3:10 PM To: agda at lists.chalmers.se Subject: [Agda] Type of Natural numbers representations Hi, when constructing the different unary, binary, ternary... types that represent the natural numbers it seems that both the constructors and the increment operator follow a pattern. https://gist.github.com/pnlph/3f6aca8dea4ba570abcb461b37ae14cb Is it possible or makes sense defining this pattern in Agda as a type of natural numbers representations, say Nr, indexed on the natural numbers themselves so that Nr 1 = N, Nr 2 = Bin, Nr 3 = Ter, ..., Nr 10 = Dec,...? best, herminie -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Sat Jun 29 05:38:45 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sat, 29 Jun 2019 11:38:45 +0800 Subject: [Agda] [ANNOUNCE] Standard library v1.1 Message-ID: Dear all, The Agda Team is very pleased to announce the release of the standard library 1.1. The library has been tested using Agda 2.6.0.1. The new version of the library, CHANGELOG and README are available at http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary Enjoy the standard library 1.1. -- Matthew, on behalf of the Agda Team -------------- next part -------------- An HTML attachment was scrubbed... URL: From liamoc at cse.unsw.edu.au Mon Jul 1 10:18:07 2019 From: liamoc at cse.unsw.edu.au (Liam O'Connor) Date: Mon, 1 Jul 2019 18:18:07 +1000 Subject: [Agda] Postdoctoral positions in Trustworthy Systems at UNSW Message-ID: Hi all, My research group is currently looking for postdocs. The ad is attached below. Please direct all enquiries to Christine Rizkallah (c.rizkallah at unsw.edu.au).? Liam? --- If only there were a place where I could prove theorems, change the world, and have fun while doing it... Sounds too good to exist? In the Trustworthy Systems team at UNSW and Data61 that's what we do for a living. We are the creators of seL4, the world's first fully formally verified operating system kernel with extreme performance and strong security & correctness proofs. Our highly international team is located on the UNSW campus, close to the beautiful beaches of sunny Sydney, Australia, one of the world's most liveable cities. We are offering a two-year postdoctoral researcher position that would allow you to join us in Sydney, move things forward, and have a global impact. Cogent is a language we designed that co-generates code and proofs in order to ease the verification of systems components around seL4. Potential PhD topics include designing and implementing new domain-specific programming languages extending Cogent, writing formal specifications and proofs in Isabelle/HOL, developing formally verified infrastructure for building secure systems on top of seL4, contributing to improved proof automation and reasoning techniques, and applying formal proof to real-world systems and tools. To apply you should have (or be about to obtain) a PhD degree in Computer Science, Mathematics, or similar. You should also possess a significant subset of the following skills: - functional programming in a language like Haskell, ML, or OCaml - first-order or higher-order formal logic - basic experience in C - ability and desire to quickly learn new techniques - ability and desire to work in a larger team If you additionally have experience - in software verification with an interactive theorem prover such as ? Isabelle/HOL, HOL4, Coq, or?Agda, and/or - with programming languages and verified or certifying compilers you should definitely apply! You will work with a unique world-leading combination of OS and formal methods experts, students at undergraduate and PhD level, engineers, and researchers from 5 continents, speaking over 15 languages. Trustworthy Systems is a fun, creative, and welcoming workplace with flexible hours & work arrangements. We value diversity in all forms and welcome applications from people of all ages, including people with disabilities, and those who identify as LGBTIQ. See https://ts.data61.csiro.au/diversity/?for more information. For applying, use the following link: http://external-careers.jobs.unsw.edu.au/cw/en/job/497074/postdoctoral-fellow-computer-programming -Salary range depending on experience and qualifications:? ? $95,449 - $102,091 (AUD) + 17% superannuation (retirement funds) - 2-year fixed term contract - the start date is negotiable - flexible hours and work arrangements This round of applications closes on the?13th of July 2019, 11:50pm?AEST. For any questions on this position, please contact Christine Rizkallah? The seL4 code and proof, and the Cogent project, are open source. Check them out at?https://seL4.systems?and? https://ts.data61.csiro.au/projects/TS/cogent.pml More information about the Trustworthy Systems team at https://ts.data61.csiro.au Still studying? We also have internship opportunities! https://ts.data61.csiro.au/students/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From fredrik.nordvall-forsberg at strath.ac.uk Tue Jul 2 18:08:46 2019 From: fredrik.nordvall-forsberg at strath.ac.uk (Fredrik Nordvall Forsberg) Date: Tue, 2 Jul 2019 17:08:46 +0100 Subject: [Agda] Final Call for Participation: Scottish Programming Languages and Verification Summer School In-Reply-To: <780dd53f-c0cf-2a9c-8e86-948f6d1178c4@strath.ac.uk> References: <780dd53f-c0cf-2a9c-8e86-948f6d1178c4@strath.ac.uk> Message-ID: <10c27133-fa4c-1aa5-ebe2-e0220ac7aae1@strath.ac.uk> Dear colleagues, This is the final announcement for the Scottish Programming Languages and Verification Summer School. Early registration closes soon: this Thursday 4th July. Note that accommodation in student halls is only available to be booked until then. +-----------------------------------------------------------------+ | | | Scottish Programming Languages and Verification Summer School | | The University of Strathclyde, Glasgow, UK, 5--9 August 2019 | | http://www.macs.hw.ac.uk/splv/splv19/ | | | +-----------------------------------------------------------------+ The inaugural Scottish Programming Languages and Verification Summer School will be held at the University of Strathclyde 5--9 August 2019. The aim of the school is to provide PhD students with core and specialised knowledge in the broad area of Programming Language and Verification research. COURSES ======= Invited course -------------- Chung-chieh Shan (Indiana University) "Probabilistic programming" Core courses ------------ Phil Wadler (University of Edinburgh) "Programming Language Foundations in Agda" Neil Ghani (University of Strathclyde) "Category Theory" Specialised courses ------------------- Chris Brown (University of St Andrews) "Parallel Programming" Ornela Dardha (University of Glasgow) "Session Types" Conor McBride (University of Strathclyde) "Dependently Typed Programming" Greg Michaelson and Rob Stewart (Heriot-Watt University) "Domain-Specific Languages" PREREQUISITES ============= The school is aimed at PhD students in programming languages, verification and related areas. Also researchers and practitioners will be very welcome, as will strong master's students with the support of a supervisor. Participants will need to have a background in computer science, mathematics or a related discipline, and have basic familiarity with (functional) programming and logic. DATES ===== Early Registration deadline: Thursday 4 July 2019. Final Registration deadline: Monday 22 July 2019. School: Monday 5 August to Friday 9 August 2019. SPONSORSHIP =========== The summer school is generously sponsored by SICSA, the Scottish Informatics and Computer Science Alliance, and partially supported by ERC grant Skye (grant no 682315) and the UK Manycore Network. We also offer a range of sponsorship opportunities for industry with attractive benefits -- please get in touch if you are interested. REGISTRATION ============ Registration is open at the following address: http://tiny.cc/SPLV19-registration Since the school is sponsored by SICSA, attendance will be *free* for PhD students affiliated with Scottish universities. The registration fees in general are as follows: SICSA student: ?0. Academic: ?160. Industry: ?300. The registration fee covers coffee breaks, lunches and an excursion. ACCOMMODATION ============= We can offer accommodation in student halls for students (Sunday 4 August until Saturday 10 August) for ?170, as part of the registration process. This is available until the early registration deadline. Alternatively, there are plenty of hotels, hostels or Airbnbs in central Glasgow. FURTHER INFORMATION =================== More information can be found on the school webpage: http://www.macs.hw.ac.uk/splv/splv19/ Please contact one of the local organisers if you have any questions: - Bob Atkey robert.atkey at strath.ac.uk - Clemens Kupke clemens.kupke at strath.ac.uk - Fredrik Nordvall Forsberg fredrik.nordvall-forsberg at strath.ac.uk From xu at math.lmu.de Wed Jul 3 11:32:38 2019 From: xu at math.lmu.de (Chuangjie Xu) Date: Wed, 03 Jul 2019 11:32:38 +0200 Subject: [Agda] Agda Implementors' Meeting XXX - Munich, 11-17 September 2019 Message-ID: <20190703113238.19455irh71x5vxva@webmail.mathematik.uni-muenchen.de> [Apologies for multiple postings.] --------------------------------------------------------------- Agda Implementors' Meeting XXX Call for participation http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.AIMXXX --------------------------------------------------------------- The thirtieth Agda Implementors' Meeting will take place in Munich, Germany from Wednesday 11 September 2019 to Tuesday 17 September 2019. The meeting will be similar to previous ones: * Presentations concerning theory, implementation, and use cases of Agda and other Agda-like languages. * Discussions around issues related to the Agda language. * Plenty of time to work in, on, under or around Agda, in collaboration with other participants. To register for AIM XXX, please fill out the form below and send it to Chuangjie Xu by email . More information is available at http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.AIMXXX Please spread the word about this meeting. Best regards, Chuangjie -------8<------------------------------------------------------- Registration form for Agda Implementors' Meeting XXX Name: Title and optionally abstract (if you want to give a talk or lead a discussion): Suggestions for code sprints (optional): Additional comments: ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. From Jesper at sikanda.be Tue Jul 9 18:35:15 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 9 Jul 2019 18:35:15 +0200 Subject: [Agda] New blog post: Writing Agda blog posts in literate markdown Message-ID: Hi all, I just posted a new blog post to https://jesper.sikanda.be/posts/literate-agda.html about writing blog posts as literate Agda files. I hope some of you find it useful, and maybe even are inspired to write your own Agda blogs! -- Jesper -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Fri Jul 12 12:27:00 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Fri, 12 Jul 2019 10:27:00 +0000 Subject: [Agda] Types summer school 2019 at lake Ohrid Message-ID: <44198D09-8D8D-42D3-9602-53BA2663AE3A@nottingham.ac.uk> ***REMINDER *** Application deadline is on Monday! COST action CA15123 EUTYPES Summer School on Types for Programming and Verification Ohrid, Macedonia, 30 August ? 4 September 2019 https://sites.google.com/view/2019eutypesschool/home CALL FOR APPLICATIONS BACKGROUND Types are pervasive in programming and information technology. A type defines a formal interface between software components, allowing the automatic verification of their connections, and greatly enhancing the robustness and reliability of computations and communications. In rich dependent type theories, the full functional specification of a program can be expressed as a type. Type systems have rapidly evolved over the past years, becoming more sophisticated, capturing new aspects of the behaviour of programs and the dynamics of their execution. The aim of this summer school is to provide advanced training, especially to PhD students and early-career researchers, in all aspects of the theory and practice of type theory and applications. LECTURERS AND COURSES ? Course 1: Hugo Herbelin: Introduction to lambda calculus & type theory ? ? Course 2: Jesper Cockx: Correct-by-construction programming in Agda ? ? Course 3 : Yves Bertot: Introductory course on Coq/Gallina ? ? Course 4 : Xavier Leroy: Proving the correctness of a compiler ? ? Course 5: Nicolai Kraus: Introduction to homotopy type theory ? APPLICATION The capacity of the summer school is up to 40 students. ? Accommodation, full board (i.e., including all meals): 5 nights @ ?35 = ? 175. Extra nights cost also ?35. ? A maximum of 30 students (PhD students / early-career researchers) from countries involved in EUTYPES can receive a grant from the COST action to partially cover their costs. To apply for a place in the school and a grant, please fill out (as soon as possible) the form at http://tiny.cc/olbq8y Application deadline: 15 July 2019. Notification of acceptance and funding: continuously, at the latest by 22 July 2019. VENUE Ohrid is a small town on Lake Ohrid in Macedonia, southwest of Skopje. Ohrid is notable for once having had 365 churches, one for each day of the year, and has been referred to as the Jerusalem of the Balkans. Ohrid and Lake Ohrid are on UNESCO's lists of cultural and natural World Heritage sites. The school will be held in the Congress Centre of Ohrid, which is also the accommodation site. TRAVEL Most participants will have to fly to Skopje and then get to Ohrid by bus. WizzAir operates direct flights to Ohrid from Basel-Mulhouse-Freiburg and London Luton. ORGANIZERS Thorsten Altenkirch Herman Geuvers, Marija Mihova This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From aggelos.biboudis at epfl.ch Fri Jul 12 14:34:37 2019 From: aggelos.biboudis at epfl.ch (Aggelos Biboudis) Date: Fri, 12 Jul 2019 14:34:37 +0200 Subject: [Agda] SPLASH 2019 Combined Call for Workshop Submissions Message-ID: Following its long-standing tradition, SPLASH will host a variety of workshops, allowing their participants to meet and discuss research questions with peers, to mature new and exciting ideas, and to build up communities and start new collaborations. SPLASH workshops complement the main tracks of the conference and provide meetings in a smaller and more specialized setting. The following workshops will be co-located with SPLASH 2019. * AGERE (Actors, Agents, and Decentralized Control) * AI-SEPS (AI-Inspired and Empirical Methods for Software Engineering on Parallel Computing Systems) * DSM (Domain-Specific Modeling) * IC (Incremental Computing) * LIVE (Live Programming) * META (Metaprogramming) * NJR (Normalized Java Resource) * REBLS (Reactive and Event-based Languages & Systems) * STOKED (Spatio-Temporal platforms for Observations and Knowledge of Earth Data) * VMIL (Virtual Machines and Intermediate Languages) *The submission deadline for all workshops is Fri 2 Aug 2019 (AoE).* AGERE (Actors, Agents, and Decentralized Control) ------------------------------------------------- Call: https://2019.splashcon.org/home/agere-2019 The AGERE! workshop focuses on programming systems, languages, and applications based on actors, active/concurrent objects, agents, and -- more generally -- on high-level programming paradigms which promote decentralized control in solving problems and developing software. AGERE covers both the theory and the practice of design and programming, bringing together researchers working on models, languages and technologies, and practitioners developing real-world systems and applications. AI-SEPS (AI-Inspired and Empirical Methods for SE on Parallel Computing Systems) -------------------------------------------------------------------------------- Call: https://2019.splashcon.org/home/seps-2019 The AI-SEPS workshop provides a stable forum for researchers and practitioners addressing the challenges and issues of the software development life cycle on modern parallel platforms and HPC systems. Emerging artificial intelligence technologies are promising approaches to tackle these issues, as well as approaches that use traditional empirical and experimental methods. The workshop title reflects a change from the previous editions, with emphasis placed on the trend of AI-inspired software engineering techniques for performance. We aim to advance the state of the art in all aspects of techniques on software engineering and parallel computing systems such as requirements engineering and software specification; design and implementation; program analysis; performance analysis, profiling and tuning; testing and debugging. DSM (Domain-Specific Modeling) ------------------------------ Call: https://2019.splashcon.org/home/dsm-2019 Domain-Specific Modeling (DSM) languages provide a viable and time-tested solution for continuing to raise the level of abstraction, and thus productivity, beyond coding, making systems and software development faster and easier. In DSM, the models are constructed using concepts that represent things in the application domain, not concepts of a given programming language. The modeling language follows the domain abstractions and semantics, allowing developers to perceive themselves as working directly with domain concepts. Some possible topics for submission to the workshop include: experience reports, creation of metamodel-based languages, novel approaches for code generation from domain-specific models, language evolution, metamodeling frameworks and languages, and tool support for DSMs. IC (Incremental Computing) ----------------------------- Call: https://2019.splashcon.org/home/ic-2019 The second Workshop on Incremental Computing (IC) will provide a space where PL enthusiasts and researchers can discuss incremental computing problems and solutions. A good talk at IC probably consists of one or more of the following: explain an existing language or framework for incremental computing; outline an incremental computing domain in detail, highlighting challenges; outline a new incremental computing problem, or problem domain; or, propose a new language or framework for incremental computing. This list is not exhaustive, but merely suggestive. LIVE (Live Programming) ----------------------- Call: https://2019.splashcon.org/home/live-2019 The LIVE workshop invites submissions of ideas for improving programming via liveness. Live programming gives the programmer immediate feedback on the behavior of a program as it is edited, replacing the edit-compile-debug cycle with a fluid programming experience. The most commonly used live programming environment is the spreadsheet, but there are many others. The study of live programming is now a [re-]established area of research. This year we would like to reflect on what has been achieved, what has been learnt, and what remains to be done, growing up from a nascent community into a discipline that can build on previous work. We especially welcome reflection upon prior work, including proposals to integrate, generalize, or theoretically frame them. We will do this whilst maintaining the shared spirit of LIVE, encouraging a focus on the human experience of programming. The LIVE workshop is a forum for early-stage work to receive constructive criticism. We accept short papers, web essays with embedded videos, and demo videos. META (Metaprogramming) ---------------------- Call: https://2019.splashcon.org/home/meta-2019 The changing hardware and software landscape along with the increased heterogeneity of systems make metaprogramming once more an important research topic to handle the associated complexity. This workshop aims to bring together researchers working on metaprogramming and reflection, as well as users building applications, language extensions, or software tools using them. The challenges which metaprogramming faces are manifold. They start with formal reasoning about reflective programs, continue with performance and tooling, and reach into the empirical field to understand how metaprogramming is used and how it affects software maintainability. While industry accepted metaprogramming on a wide scale with Ruby, Scala, JavaScript and others, academia still needs to bring it to the same level of convenience, tooling, and understanding as for direct programming styles. Contributions to the workshop are welcome on a wide range of topics related to the design, implementation, and application of metaprogramming techniques, as well as formal methods and empirical studies for such systems and languages. NJR (Normalized Java Resource) ------------------------------ Call: https://2019.splashcon.org/home/njr-2019 Software researchers increasingly take advantage of large software repositories when they design new tools. How do we make such repositories maximally useful for research? In particular, how do we make them more searchable, make interaction scriptable, and ensure that we can run both static and dynamic analyses? Additionally, how do we make the results from tools reproducible, how do we label programs with ground truth, and how do we measure whether a repository is representative of real-world applications? NJR 2019 will be the third workshop in a series that addresses these questions. The goal is for researchers in academia and industry to share new ideas, demonstrate recent tools, and discuss directions for research and development. REBLS (Reactive and Event-based Languages and Systems) ------------------------------------------------------ Call: https://2019.splashcon.org/home/rebls-2019 Reactive programming and event-based programming are two closely related programming styles that are becoming ever more important with the advent of advanced HPC technology and the ever increasing requirement for our applications to run on the web or on collaborating mobile devices. A number of publications on middleware and language design -- so-called reactive and event-based languages and systems (REBLS) -- have already seen the light, but the field still raises several questions. For example, the interaction with mainstream language concepts is poorly understood, implementation technology is in its infancy and modularity mechanisms are almost totally lacking. Moreover, large applications are still to be developed and patterns and tools for developing reactive applications is an area that is vastly unexplored. This workshop will gather researchers in reactive and event-based languages and systems. The goal of the workshop is to exchange new technical research results and to define better the field by coming up with taxonomies and overviews of the existing work. STOKED (Spatio-Temporal platforms for Observations and Knowledge of Earth Data) ------------------------------------------------------------------------------- Call: https://2019.splashcon.org/home/stoked-2019 Global coverage and temporal resolutions of earth observation imagery data is increasing at an unprecedented rate, generating trillions of new pixels of data daily. The challenge with this "big data" is finding practical ways to extract knowledge and deliver it to end users at scale, both due to the complex nature and the sheer volume of information. Detailed, standardized geographic information is required to enable a new era of spatial temporal analytics?enabling insights to understand, monitor, and manage the earth?s resources in a sustainable manner. This can be accomplished through massive aggregation of data from remote sensors coupled with novel approaches to preparing, analyzing, and interacting with data. Modern spatio-temporal platforms will soon be using 3D visual interactive maps with close to real-time deep learning algorithms. In addition to system infrastructure and UI/UX challenges, we also need to address the normalization problems of data, particularly with data generated from multiple sensors. Use cases in climate change and emergency response in "extreme events" would see immediate benefit from this kind of platform. STOKED will provide an opportunity for researchers and stakeholders from this broad spectrum of applications and domains to start to design future platforms from an interdisciplinary perspective. VMIL (Virtual Machines and Intermediate Languages) -------------------------------------------------- Call: https://2019.splashcon.org/home/vmil-2019 The concept of Virtual Machines is pervasive in the design and implementation of programming systems. Virtual Machines and the languages they implement are crucial in the specification, implementation and/or user-facing deployment of most programming technologies. The VMIL workshop is a forum for researchers and cutting-edge practitioners in language virtual machines, the intermediate languages they use, and related issues. From klin at mimuw.edu.pl Sun Jul 14 21:00:56 2019 From: klin at mimuw.edu.pl (Bartek Klin) Date: Sun, 14 Jul 2019 21:00:56 +0200 Subject: [Agda] Summer School on Nominal Techniques: FoPSS 2019 Message-ID: FoPPS 2019: Nominal Techniques 3rd Summer School on Foundations of Programming and Software Systems 10-15 September, Warsaw, Poland https://www.mimuw.edu.pl/~fopss19/ ================================================================== The 2019 Alonzo Church Award was given to M. J. Gabbay and A. M. Pitts for their ground-breaking work on nominal sets. (https://siglog.org/winners-of-the-2019-alonzo-church-award/) Do you want to learn what that was about? Come to FoPSS 2019! ================================================================== The Summer School on Foundations of Programming and Software Systems (FoPSS) was jointly created by EATCS, ETAPS, ACM SIGLOG and ACM SIGPLAN. It was first organised in 2017. The goal is to introduce the participants to various aspects of computation theory and programming languages. The school, spread over a single week, is aimed at students and researchers in Theoretical Computer Science, broadly construed. Each year the school is focused on a particular, actively researched topic. Our focus in 2019 are Nominal Techniques in Computer Science. For the introduction and cornerstone contributions to this area Murdoch J. Gabbay and Andrew M. Pitts received the 2019 Alonzo Church Award. Both of them are among the lecturers of FoPSS 2019. The scientific programme of the school is available from our website: https://www.mimuw.edu.pl/~fopss19/programme.html Early registration fee is 1600PLN (approx. 375EUR), and it includes lunches, coffee breaks and accommodation in a hotel within a walking distance from the school venue. We have a few scholarships available to participants who have difficult access to funding. Registration is open! ================================================================== COLOCATED EVENT: Highlights 2019: 7th annual conference on Highlights of Logic, Games and Automata 17-20 September (http://highlights-conference.org) From dan.krejsa at gmail.com Tue Jul 16 01:05:05 2019 From: dan.krejsa at gmail.com (Dan Krejsa) Date: Mon, 15 Jul 2019 16:05:05 -0700 Subject: [Agda] plfa preservation + progresss => eval termination checking failure in Agda 2.6.1? Message-ID: Hi, I'm (slowly) working through Philip Wadler's PLFA course. I happen to be using Agda 2.6.1, from the git 'master' branch at commit d8449caf816e0c5e13419ee2d3fe32a047ec3db8, and I ran into a termination checking failure in the 'eval' function in the Properties.lagda chapter. This version (from the text) eval : ? {L A} ? Gas ? ? ? L ? A --------- ? Steps L eval {L} (gas zero) ?L = steps (L ?) out-of-gas eval {L} (gas (suc m)) ?L with progress ?L ... | done VL = steps (L ?) (done VL) ... | step L??M with eval (gas m) (preserve ?L L??M) ... | steps M??N fin = steps (L ??? L??M ? M??N) fin fails termination checking. Note that 'Gas' is just a type that holds a natural number: data Gas : Set where gas : ? ? Gas However, if one just replaces Gas with ? in the function, the termination checker is happy: eval : ? {L A} ? ? ? ? ? L ? A --------- ? Steps L eval {L} zero ?L = steps (L ?) out-of-gas eval {L} (suc m) ?L with progress ?L ... | done VL = steps (L ?) (done VL) ... | step L??M with eval m (preserve ?L L??M) ... | steps M??N fin = steps (L ??? L??M ? M??N) fin Is this an intentional change in the termination checking? - Dan -------------- next part -------------- An HTML attachment was scrubbed... URL: From icfp.publicity at googlemail.com Wed Jul 17 20:51:55 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Wed, 17 Jul 2019 14:51:55 -0400 Subject: [Agda] Second Call for Participation: ICFP 2019 Message-ID: <5d2f6e4bbc792_68f92ae6da55e5c4438b0@homer.mail> ** The Early Registration deadline is tomorrow! ** ===================================================================== Call for Participation ICFP 2019 24th ACM SIGPLAN International Conference on Functional Programming and affiliated events August 18 - August 23, 2019 Berlin, Germany http://icfp19.sigplan.org/ Early Registration until July 18! ===================================================================== ICFP provides a forum for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. The conference covers the entire spectrum of work, from practice to theory, including its peripheries. This year, ICFP is co-located with BOBKonf! * Overview and affiliated events: http://icfp19.sigplan.org/home * Program: http://icfp19.sigplan.org/program/program-icfp-2019 * Accepted papers: http://icfp19.sigplan.org/track/icfp-2019-papers * Registration is available via: https://regmaster4.com/2019conf/ICFP19/register.php Early registration ends 18 July, 2019. * Programming contest: https://icfpcontest2019.github.io/ * Student Research Competition: https://icfp19.sigplan.org/track/icfp-2019-Student-Research-Competition * Follow us on Twitter for the latest news: http://twitter.com/icfp_conference In addition to BOBKonf (8/21), there are several events co-located with ICFP: * Erlang Workshop (8/18) * Functional Art, Music, Modeling and Design (8/23) * Functional High-Performance and Numerical Computing (8/18) * Haskell Implementors' Workshop (8/23) * Haskell Symposium (8/22-8/23) * miniKanren Workshop (8/22) * ML Family Workshop (8/22) * OCaml Workshop (8/23) * Programming Languages Mentoring Workshop (8/18) * Scheme Workshop (8/18) * Type-Driven Development (8/18) ### ICFP Organizers General Chair: Derek Dreyer (MPI-SWS, Germany) Artifact Evaluation Co-Chairs: Simon Marlow (Facebook, UK) Industrial Relations Chair: Alan Jeffrey (Mozilla Research, USA) Programming Contest Organiser: Ilya Sergey (Yale-NUS College, Singapore) Publicity and Web Chair: Sam Tobin-Hochstadt (Indiana University, USA) Student Research Competition Chair: William J. Bowman (University of British Columbia, Canada) Workshops Co-Chair: Christophe Scholliers (Universiteit Gent, Belgium) Jennifer Hackett (University of Nottingham, UK) Conference Manager: Annabel Satin (P.C.K.) ### PACMPL Volume 3, Issue ICFP 2019 Principal Editor: Fran?ois Pottier (Inria, France) Review Committee: Lennart Beringer (Princeton University, United States) Joachim Breitner (DFINITY Foundation, Germany) Laura M. Castro (University of A Coru?a, Spain) Ezgi ?i?ek (Facebook London, United Kingdom) Pierre-Evariste Dagand (LIP6/CNRS, France) Christos Dimoulas (Northwestern University, United States) Jacques-Henri Jourdan (CNRS, LRI, Universit? Paris-Sud, France) Andrew Kennedy (Facebook London, United Kingdom) Daan Leijen (Microsoft Research, United States) Kazutaka Matsuda (Tohoku University, Japan) Bruno C. d. S. Oliveira (University of Hong Kong, China) Klaus Ostermann (University of T?bingen, Germany) Jennifer Paykin (Galois, United States) Frank Pfenning (Carnegie Mellon University, USA) Mike Rainey (Indiana University, USA) Chung-chieh Shan (Indiana University, USA) Sam Staton (University of Oxford, UK) Pierre-Yves Strub (Ecole Polytechnique, France) German Vidal (Universitat Politecnica de Valencia, Spain) External Review Committee: Michael D. Adams (University of Utah, USA) Robert Atkey (University of Strathclyde, IK) Sheng Chen (University of Louisiana at Lafayette, USA) James Cheney (University of Edinburgh, UK) Adam Chlipala (Massachusetts Institute of Technology, USA) Evelyne Contejean (LRI, Universit? Paris-Sud, France) Germ?n Andr?s Delbianco (IRIF, Universit? Paris Diderot, France) Dominique Devriese (Vrije Universiteit Brussel, Belgium) Richard A. Eisenberg (Bryn Mawr College, USA) Conal Elliott (Target, USA) Sebastian Erdweg (Delft University of Technology, Netherlands) Michael Greenberg (Pomona College, USA) Adrien Guatto (IRIF, Universit? Paris Diderot, France) Jennifer Hackett (University of Nottingham, UK) Troels Henriksen (University of Copenhagen, Denmark) Chung-Kil Hur (Seoul National University, Republic of Korea) Roberto Ierusalimschy (PUC-Rio, Brazil) Ranjit Jhala (University of California, San Diego, USA) Ralf Jung (MPI-SWS, Germany) Ohad Kammar (University of Oxford, UK) Oleg Kiselyov (Tohoku University, Japan) Hsiang-Shang ?Josh? Ko (National Institute of Informatics, Japan) Ond?ej Lhot?k (University of Waterloo, Canada) Dan Licata (Wesleyan University, USA) Geoffrey Mainland (Drexel University, USA) Simon Marlow (Facebook, UK) Akimasa Morihata (University of Tokyo, Japan) Shin-Cheng Mu (Academia Sinica, Taiwan) Guillaume Munch-Maccagnoni (Inria, France) Kim Nguy?n (University of Paris-Sud, France) Ulf Norell (Gothenburg University, Sweden) Atsushi Ohori (Tohoku University, Japan) Rex Page (University of Oklahoma, USA) Zoe Paraskevopoulou (Princeton University, USA) Nadia Polikarpova (University of California, San Diego, USA) Jonathan Protzenko (Microsoft Research, USA) Tiark Rompf (Purdue University, USA) Andreas Rossberg (Dfinity, Germany) KC Sivaramakrishnan (University of Cambridge, UI) Nicholas Smallbone (Chalmers University of Technology, Sweden) Matthieu Sozeau (Inria, France) Sandro Stucki (Chalmers | University of Gothenburg, Sweden) Don Syme (Microsoft, UK) Zachary Tatlock (University of Washington, USA) Sam Tobin-Hochstadt (Indiana University, USA) Takeshi Tsukada (University of Tokyo, Japan) Tarmo Uustalu (Reykjavik University, Iceland) Benoit Valiron (LRI, CentraleSupelec, Univ. Paris Saclay, France) Daniel Winograd-Cort (University of Pennsylvania, USA) Nicolas Wu (University of Bristol, UK) From Graham.Hutton at nottingham.ac.uk Thu Jul 18 09:30:21 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Thu, 18 Jul 2019 07:30:21 +0000 Subject: [Agda] MPC 2019 - Call for Participation Message-ID: ====================================================================== *** CALL FOR PARTICIPATION -- MPC 2019 *** 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== PROGRAM: https://tinyurl.com/yxvvc5vb ACCEPTED PAPERS: https://tinyurl.com/yyuhy8ze REGISTRATION AND TRAVEL: https://tinyurl.com/y4uetlsr KEYNOTE SPEAKERS: Assia Mahboubi (MPC) INRIA, France Annabelle McIver (MPC) Macquarie University, Australia Tony Hoare (UTP) Oxford University, UK Shriram Krishnamurthi (FM) Brown University, USA BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK For any queries about the program please contact the program chair, Graham Hutton . CONFERENCE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISER: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From Jeremy.Dawson at anu.edu.au Tue Jul 16 05:56:15 2019 From: Jeremy.Dawson at anu.edu.au (Jeremy Dawson) Date: Tue, 16 Jul 2019 03:56:15 +0000 Subject: [Agda] using agda Message-ID: Hi, I believe I have successfully installed Agda as per the instructions at https://agda.readthedocs.io/en/latest/getting-started/installation.html namely sudo apt-get install agda-mode sudo apt-get install agda-stdlib but trying it out as per https://agda.readthedocs.io/en/latest/getting-started/hello-world.html ie by running agda --compile hello-world.agda gives the error Failed to find source of module IO in any of the following locations: /home/users/jeremy/agda/IO.agda /home/users/jeremy/agda/IO.lagda /usr/share/libghc-agda-dev/lib/prim/IO.agda /usr/share/libghc-agda-dev/lib/prim/IO.lagda when scope checking the declaration open import IO In fact /usr/share/libghc-agda-dev/lib/prim exists, as follows: jeremy at cecs-042179:~/agda$ cd /usr/share/libghc-agda-dev/lib/prim jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls Agda jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls -l total 4 drwxr-xr-x 2 root root 4096 Feb 8 2018 Agda jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls -l Agda total 8 -rw-r--r-- 1 root root 885 Jan 13 2016 Primitive.agda -rw-r--r-- 1 root root 2269 Jan 13 2016 Primitive.agdai trying alternatively in emacs, doing emacs hello-world.agda and then C-c C-x C-c creates a directory MAlonzo and puts a mass of stuff in it (totalling 15MB) then gives this error message Compilation error: MAlonzo/Code/Agda/Primitive.hs:4:18: Could not find module ?Data.FFI? Use -v to see a list of the files searched for. MAlonzo/Code/Agda/Primitive.hs:5:18: Could not find module ?IO.FFI? Use -v to see a list of the files searched for. What seems to have gone wrong? Thanks Jeremy From caryoscelus at gmx.com Thu Jul 18 22:21:48 2019 From: caryoscelus at gmx.com (Caryo Scelus) Date: Thu, 18 Jul 2019 20:21:48 +0000 Subject: [Agda] using agda In-Reply-To: References: Message-ID: <20190718202148.620f86ca@debian> On Tue, 16 Jul 2019 03:56:15 +0000 Jeremy Dawson wrote: > Hi, > > I believe I have successfully installed Agda as per the instructions > at > https://agda.readthedocs.io/en/latest/getting-started/installation.html > namely sudo apt-get install agda-mode > sudo apt-get install agda-stdlib > but trying it out as per > https://agda.readthedocs.io/en/latest/getting-started/hello-world.html > ie by running > agda --compile hello-world.agda > gives the error > Failed to find source of module IO in any of the following > locations: > /home/users/jeremy/agda/IO.agda > /home/users/jeremy/agda/IO.lagda > /usr/share/libghc-agda-dev/lib/prim/IO.agda > /usr/share/libghc-agda-dev/lib/prim/IO.lagda > when scope checking the declaration > open import IO > > In fact /usr/share/libghc-agda-dev/lib/prim > exists, as follows: > jeremy at cecs-042179:~/agda$ cd /usr/share/libghc-agda-dev/lib/prim > jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls > Agda > jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls -l > total 4 > drwxr-xr-x 2 root root 4096 Feb 8 2018 Agda > jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls -l Agda > total 8 > -rw-r--r-- 1 root root 885 Jan 13 2016 Primitive.agda > -rw-r--r-- 1 root root 2269 Jan 13 2016 Primitive.agdai > > trying alternatively in emacs, doing emacs hello-world.agda > and then C-c C-x C-c > creates a directory MAlonzo and puts a mass of stuff in it (totalling > 15MB) then gives this error message > Compilation error: > > MAlonzo/Code/Agda/Primitive.hs:4:18: > Could not find module ?Data.FFI? > Use -v to see a list of the files searched for. > > MAlonzo/Code/Agda/Primitive.hs:5:18: > Could not find module ?IO.FFI? > Use -v to see a list of the files searched for. > > What seems to have gone wrong? > > Thanks > > Jeremy > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda Hi, First of all: what distribution (and thus agda package versions) are you using? If your agda/stdlib packages are old, it might be better to install new versions from source. I've only used packages from debian sid and they were mostly fine (there is still one possible issue with compilation, ieee haskell package is required) The first error is likely due to need to set up path to stdlib (perhaps Emacs sets it somehow?.. i don't know). The docs on that can be found e.g. here: https://agda.readthedocs.io/en/latest/tools/package-system.html Your second error looks similar to what can be found in https://lists.chalmers.se/pipermail/agda/2015/008270.html thread and if that's the case, best option is indeed to update (ffi directory mentioned there has been rid of back in 2016). Hope that helps From caryoscelus at gmx.com Fri Jul 19 17:56:52 2019 From: caryoscelus at gmx.com (Caryo Scelus) Date: Fri, 19 Jul 2019 15:56:52 +0000 Subject: [Agda] using agda In-Reply-To: References: <20190718202148.620f86ca@debian> Message-ID: <20190719155550.0d836d72@debian> On Fri, 19 Jul 2019 01:35:24 +0000 Jeremy Dawson wrote: > Thanks. > > Distro is DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS" > > version of agda seems to be Version: 2.4.2.5-1build1 And an old library; yeah, i'd say that's too old to bother fixing (but if you really want, check out that old thread). Perhaps the most balanced way is to install Agda from hackage (via cabal or stack); alternatively you can try installing newer debs (from fresher ubuntu or debian), but that obviously might run into issues. > I've just tried here at home, getting a similar error, distro is > Fedora 27, agda version is Agda-2.5.2-9.fc27.x86_64 > Although latest version is 2.6.x, this is more reasonably recent. Do you experience both errors there? (first should be solvable, as i mentioned in previous message, by setting up stdlib path/dependency) What are messages exactly? From Jeremy.Dawson at anu.edu.au Fri Jul 19 03:35:24 2019 From: Jeremy.Dawson at anu.edu.au (Jeremy Dawson) Date: Fri, 19 Jul 2019 01:35:24 +0000 Subject: [Agda] using agda In-Reply-To: <20190718202148.620f86ca@debian> References: <20190718202148.620f86ca@debian> Message-ID: Thanks. Distro is DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS" version of agda seems to be Version: 2.4.2.5-1build1 I've just tried here at home, getting a similar error, distro is Fedora 27, agda version is Agda-2.5.2-9.fc27.x86_64 Thanks Jeremy On 07/19/2019 06:21 AM, Caryo Scelus wrote: > On Tue, 16 Jul 2019 03:56:15 +0000 > Jeremy Dawson wrote: > >> Hi, >> >> I believe I have successfully installed Agda as per the instructions >> at >> https://agda.readthedocs.io/en/latest/getting-started/installation.html >> namely sudo apt-get install agda-mode >> sudo apt-get install agda-stdlib >> but trying it out as per >> https://agda.readthedocs.io/en/latest/getting-started/hello-world.html >> ie by running >> agda --compile hello-world.agda >> gives the error >> Failed to find source of module IO in any of the following >> locations: >> /home/users/jeremy/agda/IO.agda >> /home/users/jeremy/agda/IO.lagda >> /usr/share/libghc-agda-dev/lib/prim/IO.agda >> /usr/share/libghc-agda-dev/lib/prim/IO.lagda >> when scope checking the declaration >> open import IO >> >> In fact /usr/share/libghc-agda-dev/lib/prim >> exists, as follows: >> jeremy at cecs-042179:~/agda$ cd /usr/share/libghc-agda-dev/lib/prim >> jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls >> Agda >> jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls -l >> total 4 >> drwxr-xr-x 2 root root 4096 Feb 8 2018 Agda >> jeremy at cecs-042179:/usr/share/libghc-agda-dev/lib/prim$ ls -l Agda >> total 8 >> -rw-r--r-- 1 root root 885 Jan 13 2016 Primitive.agda >> -rw-r--r-- 1 root root 2269 Jan 13 2016 Primitive.agdai >> >> trying alternatively in emacs, doing emacs hello-world.agda >> and then C-c C-x C-c >> creates a directory MAlonzo and puts a mass of stuff in it (totalling >> 15MB) then gives this error message >> Compilation error: >> >> MAlonzo/Code/Agda/Primitive.hs:4:18: >> Could not find module ?Data.FFI? >> Use -v to see a list of the files searched for. >> >> MAlonzo/Code/Agda/Primitive.hs:5:18: >> Could not find module ?IO.FFI? >> Use -v to see a list of the files searched for. >> >> What seems to have gone wrong? >> >> Thanks >> >> Jeremy >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > Hi, > > First of all: what distribution (and thus agda package versions) are you > using? If your agda/stdlib packages are old, it might be better to > install new versions from source. I've only used packages from debian > sid and they were mostly fine (there is still one possible issue with > compilation, ieee haskell package is required) > > The first error is likely due to need to set up path to stdlib > (perhaps Emacs sets it somehow?.. i don't know). The docs on that can > be found e.g. here: > https://agda.readthedocs.io/en/latest/tools/package-system.html > > Your second error looks similar to what can be found in > https://lists.chalmers.se/pipermail/agda/2015/008270.html thread and > if that's the case, best option is indeed to update (ffi directory > mentioned there has been rid of back in 2016). > > Hope that helps > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From A.Popescu at mdx.ac.uk Wed Jul 24 00:09:28 2019 From: A.Popescu at mdx.ac.uk (Andrei Popescu) Date: Tue, 23 Jul 2019 22:09:28 +0000 Subject: [Agda] FroCoS 2019 and TABLEAUX 2019 (London, September 2-6): call for participation Message-ID: The 2019 editions of FroCoS (the 12th International Symposium on Frontiers of Combining Systems) and TABLEAUX (the 28th International Conference on Automated Reasoning with Analytic Tableaux and Related Methods), as well as their affiliated workshops and tutorials will take place in London, at Middlesex University, on the week of September 2-6. This year we have an exciting program of contributed and invited talks, and affiliated events. Please see https://tableaux2019.org/Program_FroCoS_TABLEAUX_2019.pdf for detailed program information. Moreover, information on traveling and accommodation (including affordable accommodation for budget-constrained participants), and on the sites and activities that can be enjoyed in the Middlesex University's beautiful campus, is available from the conferences' websites: https://frocos2019.org and https://tableaux2019.org Information on registration and fees is also available from these websites. The deadline for early registration is August 21st, 2019. INVITED TALKS * Jeremy Avigad. Automated Reasoning for the Working Mathematician * Maria Paola Bonacina. Conflict-Driven Reasoning in Unions of Theories * Stephane Graham-Lengrand. Recent and Ongoing Developments of Model-Constructing Satisfiability * Stephane Graham-Lengrand and Sara Negri. Remembering Roy Dyckhoff * Uli Sattler. Modularity and Automated Reasoning in Description Logics AFFILIATED WORKSHPS * The 25th Workshop on Automated Reasoning (ARW 2019), organized by Alexander Bolotov and Florian Kammueller * Journeys in Computational Logic: Tributes to Roy Dyckhoff, organized by Stephane Graham-Lengrand, Ekaterina Komendantskaya and Mehrnoosh Sadrzadeh AFFILIATED TUTORIALS * Formalising Concurrent Computation: CLF, Celf, and Applications by Sonia Marin, Giselle Reis and Iliano Cervesato * How to Build an Automated Theorem Prover---An Introductory Tutorial (invited TABLEAUX tutorial) by Jens Otten. For any questions, please contact the organizers at chair at tableaux2019.org or chair at frocos2019.org. We hope to see many of you this September in London. Best wishes, Serenella Cerrito, Andreas Herzig, Andrei Popescu and Franco Raimondi (program chairs and local organizers) -------------- next part -------------- An HTML attachment was scrubbed... URL: From publicityifl at gmail.com Fri Jul 26 12:59:08 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Fri, 26 Jul 2019 03:59:08 -0700 Subject: [Agda] Final call for draft papers for IFL 2019 (Implementation and Application of Functional Languages) Message-ID: Hello, Please, find below the final call for draft papers for IFL 2019. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Publicity Chair of IFL ================================================================================ IFL 2019 31st Symposium on Implementation and Application of Functional Languages National University of Singapore September 25th-27th, 2019 http://2019.iflconference.org ================================================================================ ### Scope The goal of the IFL symposia is to bring together researchers actively engaged in the implementation and application of functional and function-based programming languages. IFL 2019 will be a venue for researchers to present and discuss new ideas and concepts, work in progress, and publication-ripe results related to the implementation and application of functional languages and function-based programming. Topics of interest to IFL include, but are not limited to: - language concepts - type systems, type checking, type inferencing - compilation techniques - staged compilation - run-time function specialization - run-time code generation - partial evaluation - (abstract) interpretation - metaprogramming - generic programming - automatic program generation - array processing - concurrent/parallel programming - concurrent/parallel program execution - embedded systems - web applications - (embedded) domain specific languages - security - novel memory management techniques - run-time profiling performance measurements - debugging and tracing - virtual/abstract machine architectures - validation, verification of functional programs - tools and programming techniques - (industrial) applications ### Keynote Speaker * Olivier Danvy, Yale-NUS College ### Submissions and peer-review Differently from previous editions of IFL, IFL 2019 solicits two kinds of submissions: * Regular papers (12 pages including references) * Draft papers for presentations ('weak' limit between 8 and 15 pages) Regular papers will undergo a rigorous review by the program committee, and will be evaluated according to their correctness, novelty, originality, relevance, significance, and clarity. A set of regular papers will be conditionally accepted for publication. Authors of conditionally accepted papers will be provided with committee reviews along with a set of mandatory revisions. Regular papers not accepted for publication will be considered as draft papers, at the request of the author. Draft papers will be screened to make sure that they are within the scope of IFL, and will be accepted for presentation or rejected accordingly. Prior to the symposium: Authors of conditionally accepted papers and accepted presentations will submit a pre-proceedings version of their work that will appear in the draft proceedings distributed at the symposium. The draft proceedings does not constitute a formal publication. We require that at least one of the authors present the work at IFL 2019. After the symposium: Authors of conditionally accepted papers will submit a revised versions of their paper for the formal post-proceedings. The program committee will assess whether the mandatory revisions have been adequately addressed by the authors and thereby determines the final accept/reject status of the paper. Our interest is to ultimately accept all conditionally accepted papers. If you are an author of a conditionally accepted paper, please make sure that you address all the concerns of the reviewers. Authors of accepted presentations will be given the opportunity to incorporate the feedback from discussions at the symposium and will be invited to submit a revised full article for the formal post-proceedings. The program committee will evaluate these submissions according to their correctness, novelty, originality, relevance, significance, and clarity, and will thereby determine whether the paper is accepted or rejected. ### Publication The formal proceedings will appear in the International Conference Proceedings Series of the ACM Digital Library. At no time may work submitted to IFL be simultaneously submitted to other venues; submissions must adhere to ACM SIGPLAN's republication policy: http://www.sigplan.org/Resources/Policies/Republication ### Important dates Submission of regular papers: June 15, 2019 Submission of draft papers: August 1, 2019 Regular papers notification: August 1, 2019 Regular draft papers notification: August 7, 2019 Deadline for early registration: August 15, 2019 Submission of pre-proceedings version: September 15, 2019 IFL Symposium: September 25-27, 2019 Submission of papers for post-proceedings: November 30, 2019 Notification of acceptance: January 31, 2020 Camera-ready version: February 29, 2020 ### Submission details All contributions must be written in English. Papers must use the ACM two columns conference format, which can be found at: http://www.acm.org/publications/proceedings-template Authors submit through EasyChair: https://easychair.org/conferences/?conf=ifl2019 ### Peter Landin Prize The Peter Landin Prize is awarded to the best paper presented at the symposium every year. The honored article is selected by the program committee based on the submissions received for the formal review process. The prize carries a cash award equivalent to 150 Euros. ### Organization and Program committee Chairs: Jurrien Stutterheim (Standard Chartered Bank Singapore), Wei Ngan Chin (National University of Singapore) Program Committee: - Olaf Chitil, University of Kent - Clemens Grelck, University of Amsterdam - Daisuke Kimura, Toho University - Pieter Koopman, Radboud University - Tam?s Kozsik, E?tv?s Lor?nd University - Roman Leschinskiy, Facebook - Ben Lippmeier, The University of New South Wales - Marco T. Morazan, Seton Hall University - Sven-Bodo Scholz, Heriot-Watt University - Tom Schrijvers, Katholieke Universiteit Leuven - Alejandro Serrano, Utrecht University - Tony Sloane, Macquarie University - Simon Thompson, University of Kent - Marcos Viera, Universidad de la Rep?blica - Wei Ngan Chin, NUS - Jurri?n Stutterheim, Standard Chartered Bank ### Venue The 31st IFL is organized by the National University of Singapore. Singapore is located in the heart of South-East Asia, and the city itself is extremely well connected by trains and taxis. See the website for more information on the venue. ### Acknowledgments This call-for-papers is an adaptation and evolution of content from previous instances of IFL. We are grateful to prior organizers for their work, which is reused here. A part of IFL 2019 format and CFP language that describes conditionally accepted papers has been adapted from call-for-papers of OOPSLA conferences. -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolai.kraus at gmail.com Tue Jul 30 17:08:19 2019 From: nicolai.kraus at gmail.com (Nicolai Kraus) Date: Tue, 30 Jul 2019 16:08:19 +0100 Subject: [Agda] PhD position in homotopy type theory at Birmingham Message-ID: *** PhD position in homotopy type theory *** Dear all, I would like to invite applications for a fully-funded PhD position at the University of Birmingham, School of Computer Science. The prospective student will work with me on a topic in the area of (homotopy) type theory and/or (higher dimensional) category theory; details can be discussed. The position cannot start earlier than October. The stipend consists of 15009 GBP per annum, free from tax or other reductions, for full four years. It covers all tuition fees (UK/EU level) and includes a very generous travel budget to attend conferences, workshops, and other research meetings. The stipend is provided jointly by the Royal Society [1] and the University of Birmingham. The theory group at Birmingham's School of Computer Science [2] is exceptionally strong and very active. The group organises regular seminars and informal meetings. Many relevant international events regularly take place in Birmingham such as YaMCATS, MGS, and Unimath schools. If you are interested in applying, please contact me ( nicolai.kraus at gmail.com). You do not need to have a concrete research proposal ready, but please let me know what your academic background is (in particular with respect to type theory, category theory, general maths). We can then discuss potential topics and the further application process. General information on PhD studies in Birmingham can be found online [2], but please do not yet fill out the online application form; contact me first by email. Please also distribute this advertisement to candidates that might be interested. Best wishes Nicolai [1] https://royalsociety.org/ [2] http://www.cs.bham.ac.uk/admissions/postgraduate-research/ [3] http://www.cs.bham.ac.uk/research/groupings/theory/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Fri Aug 2 21:17:15 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 2 Aug 2019 20:17:15 +0100 Subject: [Agda] Agda speed in Ubuntu Message-ID: I accidentally discovered the following (because I booted in an old partition to try to find a file, and then kept working on that partition): A certain Agda file type checks in a core i5 Dell laptop 7th generation * In 70 seconds in Ubuntu 18.04 LTS * In 50 seconds in Ubuntu 16.04 LTS I couldn't believe this, and so I tested this in a core i5 HP laptop 6th generation. The results where, respectively, * 70+delta * 50+delta' with the deltas < 3sec. Of course we can try to blame the Intel bugs and their fixes for that. But, still, both 16.04 and 18.04 are long-term support versions and are supposed to incorporate the fixes. In the four 2x2 cases, Haskell 8.0.2 and Agda 2.6.0.1 are used. Also, in both cases nothing else is running in user space. Can anybody reproduce this? This is a significant difference: 50/70 is 70% of the time in 16.04. Way faster. Martin From m.escardo at cs.bham.ac.uk Fri Aug 2 23:13:04 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 2 Aug 2019 22:13:04 +0100 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: References: Message-ID: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> I decided to do something naughty. I copied the tree .cabal from Ubuntu 16.04 to 18.04, given that both run ghc 8.0.2, and given that I kept my fingers crossed. Amazingly, now I can run Agda in 18.04 at the same faster speed as in 16.04. I have little clue of what is going on. I tested this in three machines running 18.04. All of them get the speed-up reported below. Martin On 02/08/2019 20:17, Martin Escardo wrote: > I accidentally discovered the following (because I booted in an old > partition to try to find a file, and then kept working on that partition): > > A certain Agda file type checks in a core i5 Dell laptop 7th generation > > ?* In 70 seconds in Ubuntu 18.04 LTS > ?* In 50 seconds in Ubuntu 16.04 LTS > > I couldn't believe this, and so I tested this in a core i5 HP laptop 6th > generation. The results where, respectively, > > ? * 70+delta > ? * 50+delta' > > with the deltas < 3sec. > > Of course we can try to blame the Intel bugs and their fixes for that. > But, still, both 16.04 and 18.04 are long-term support versions and are > supposed to incorporate the fixes. > > In the four 2x2 cases, Haskell 8.0.2 and Agda 2.6.0.1 are used. Also, in > both cases nothing else is running in user space. > > Can anybody reproduce this? > > This is a significant difference: 50/70 is 70% of the time in 16.04. Way > faster. > > Martin > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From marko at dimjasevic.net Sat Aug 3 10:05:14 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Sat, 03 Aug 2019 10:05:14 +0200 Subject: [Agda] Using Agda in proving computer system correct Message-ID: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Dear Agda community, I'm still relatively new to Agda and what puzzles me is a sentiment (that I got by talking to other computer scientists) that Agda is not well suited for proving complex computer systems correct. Supposedly, one is to use Coq for such a task instead; people say things like, "doing non-trivial proofs in Agda is cumbersome". If that is the case, can you tell why? If one is to do non-trivial proofs in a constructive manner, what obstacles there are to doing it in Agda? Are there rough implementation details that are still to be ironed out? Is there a specific theoretic approach that Agda relies on that is unsuitable/impractical for writing non-trivial proofs of computer systems? Is there tool support that is lacking? Is it due to sub-optimal automated proof search? Is there research still to be done to make Agda apt for proving properties of computer systems? What is different with Coq that makes it a good fit? I'm very keen to both apply and do research in Agda and accompanying theory for writing constructive proofs of computer systems. Furthermore, Agda's interface to Haskell (both in terms of the foreign function interface and the language compiling to Haskell) seems very appealing and I'm yet to explore this territory; nevertheless, the interface looks like a (one-way) bridge to Haskell software developers that are typically not trained in theorem proving. Your comments would be highly appreciated. -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID: 056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From nad at cse.gu.se Sat Aug 3 21:19:29 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Sat, 3 Aug 2019 21:19:29 +0200 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> References: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> Message-ID: <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> On 02/08/2019 23.13, Martin Escardo wrote: > I copied the tree .cabal from Ubuntu 16.04 to 18.04, given that both > run ghc 8.0.2, and given that I kept my fingers crossed. What did you copy? -- /NAD From nad at cse.gu.se Sat Aug 3 21:22:48 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Sat, 3 Aug 2019 21:22:48 +0200 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: On 03/08/2019 10.05, Marko Dimja?evi? wrote: > Is it due to sub-optimal automated proof search? I don't know what the people you talked to had in mind, but this could be one thing. Libraries might be another. -- /NAD From m.escardo at cs.bham.ac.uk Sat Aug 3 22:40:09 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Sat, 3 Aug 2019 21:40:09 +0100 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> References: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> Message-ID: <41d1e2e5-c3ef-b6b7-11e3-c11c68739294@cs.bham.ac.uk> On 03/08/2019 20:19, nad at cse.gu.se wrote: > On 02/08/2019 23.13, Martin Escardo wrote: >> I copied the tree .cabal from Ubuntu 16.04 to 18.04, given that both >> run ghc 8.0.2, and given that I kept my fingers crossed. > > What did you copy? 1804:~$ mv .cabal cabal-1804 1804:~$ cp -a /<16.04-partition>/home/mhe/.cabal cabal-1604 1804:~$ ln -s ~/cabal-1604 .cabal Martin From xqi01 at cs.tufts.edu Sat Aug 3 22:47:19 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Sat, 03 Aug 2019 13:47:19 -0700 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: <5ab44564d97a7e4921ed3796d4a0a9402f01e60d.camel@cs.tufts.edu> Also, it's widely agreed that tactic-based proofs and backwards reasoning are definitely more suited for large-scale proof efforts. As a result, most if not all large mechanized computer system verifications proof efforts use proof assistants with LCF-style tactic language (CompCert and CertiKOS in Coq, seL4 in Isabelle, CakeML in HOL4, etc.) Agda can potentially be as competitive once we get a good tactic language. However, if you want to verify a purely-functional piece of systems software, maybe Agda is the way to go. You can use dependent types to encode the desired properties and construct a correct-by-construction version of your program (though performance might become an issue). Usually this is difficult though. -Xuanrui On Sat, 2019-08-03 at 21:22 +0200, Nils Anders Danielsson wrote: > On 03/08/2019 10.05, Marko Dimja?evi? wrote: > > Is it due to sub-optimal automated proof search? > > I don't know what the people you talked to had in mind, but this > could > be one thing. Libraries might be another. > From effectfully at gmail.com Sat Aug 3 23:11:17 2019 From: effectfully at gmail.com (Roman) Date: Sun, 4 Aug 2019 00:11:17 +0300 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: ?Using Coq is like doing brain surgery over the telephone.? ? Peter Hancock That was my experience with Coq as well. I think Agda's reflection machinery (and the Idris' one for that matter) is highly underappreciated, one can do wonders with it as it gives you first class access to internals of Agda, including the ability to declare functions, quote data type definitions, infer/check types and deal with metavariables. The `TC` monad and the `macro` gadget are some really nice and intuitive things. However library support is almost non-existing. There are several libraries that deal with reflection (most notably the Ulf's `agda-prelude`), but most of them (if not all) are either dead (i.e. do not even build) or undocumented. I learned how to use reflection through trial and error and was able to implement the equivalent of Haskell's `deriving Eq`, only for decidable equality and with full support of dependent/higher-order/indexed data types with implicits, instance arguments, irrelevance and universe polymorphism [1], which showcases that Agda's reflection is quite powerful. Others have implemented ring solvers [2] [3] [4], rewrite as a tactic [5], another `deriving Eq` [6] and various other stuff. Still, library support of general metaprogramming tools is lacking. I also wasn't satisfied by naked and raw De Bruijn indices that Agda uses for its internal representation (which is very error-prone and inefficient) and not having static information on how many times a term was quoted was quite unpleasant, but these are technical details that are pretty solvable. Additional features like defining data types using reflection also can be added. What is harder to fix is that Agda since its creation hadn't been scaling well (I stopped paying attention a couple of years ago, so I don't know whether things have changed or not). It was the case that you could type check things in almost no time, then open some module (without using anything from it) and wait for two minutes for type checking to finish. People have reported that their projects required a dozen or two of GBs of RAM. Even something as simple as printing a natural number had terrible performance (I think it even was exponential?) for many years (which has been fixed rather recently). I can't count for how many times I was thinking "ok, I'll wait a bit more and kill the process". It is quite discouraging to develop something for months just to figure out that you can only test it on completely trivial things, because otherwise type checking won't finish. Again, I don't know whether the situation has been improved in recent years. So for me performance was a deal breaker, not theoretical limitations. Does Agda still implement call-by-name reduction strategy (as opposed to call-by-need)? [1] https://github.com/effectfully/Generic/ [2] https://oisdk.github.io/agda-ring-solver/README.html [3] https://github.com/agda/agda-stdlib/blob/master/src/Algebra/Solver/Ring.agda [4] https://github.com/UlfNorell/agda-prelude/blob/master/test/DeriveEqTest.agda [5] https://github.com/UlfNorell/agda-prelude/blob/master/test/Reright.agda [6] https://github.com/UlfNorell/agda-prelude/blob/master/test/DeriveEqTest.agda From liang.ting.chen.tw at gmail.com Sun Aug 4 01:53:02 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Sun, 4 Aug 2019 00:53:02 +0100 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: > > Still, library support of general > metaprogramming tools is lacking. I also wasn't satisfied by naked and > raw De Bruijn indices that Agda uses for its internal representation > (which is very error-prone and inefficient) and not having static > information on how many times a term was quoted was quite unpleasant, > but these are technical details that are pretty solvable. Additional > features like defining data types using reflection also can be added. A high-level typed tactic language can be implemented via Agda's reflection framework, and I have an early implementation of Mtac [1] in Agda as a proof of concept. See https://github.com/L-TChen/MtacAR. Just like Mtac, it gives you pattern matching against expressions, name generation/restriction, abstraction, typed meta variable and reusing Agda's interactive environment. No de Bruijn index manipulation is needed. However, it is not ready for "production use" yet. For example, backward reasoning, e.g., Mtac2, requires a cumulative hierarchy of universes to be useful, because subgoals might not be in the same universe. And, the efficiency is pretty bad compared to Agsy, i.e. `C-c C-a`. I am distracted by something else for now, but hopefully it will be actively developed again... [1] B. Ziliani, D. Dreyer, N. R. Krishnaswami, A. Nanevski, and V. Vafeiadis, ?Mtac: A monad for typed tactic programming in Coq,? J. Funct. Program., vol. 25, Aug. 2015. DOI: https://doi.org/10.1017/S0956796815000118 -- Best regards, Liang-Ting -------------- next part -------------- An HTML attachment was scrubbed... URL: From xqi01 at cs.tufts.edu Sun Aug 4 02:03:48 2019 From: xqi01 at cs.tufts.edu (Xuanrui Qi) Date: Sat, 03 Aug 2019 17:03:48 -0700 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: <911b0ec65f9f9ccb50a28785624a853f21f6d998.camel@cs.tufts.edu> Metaprogramming is a powerful tool and Agda/Idris style metaprogramming is enough to implement a powerful tactic system like Coq's. For this matter, Idris has the library Pruviloj ( https://github.com/idris-lang/Idris-dev/tree/master/libs/pruviloj) that works basically like Mtac, although Pruviloj is still pretty limited at the current point (mainly due to the lack of active development effort). Agda's reflection mechanism is certainly strong enough for one to do the same, but I agree that the main problem here is the lack of library support. For example, AFAIK there's no mechanism in Agda that works like like elaborator reflection in Idris. Sure we can do the same things using Agda's reflection mechanism, but with a lot of extra effort. Of course, we all hope that one day we would have a programming language/proof assistant that works equally well as a dependently-typed programming language and as a (tactic-based) interactive theorem prover. We already have a lot of work towards this (e.g. Program and Equations in Coq to improve DTP, elborator reflection in Idris & reflection in Agda to support tactics-style reasoning). But what we really need now, IMO, is better tool support for all of this. -Xuanrui On Sun, 2019-08-04 at 00:11 +0300, Roman wrote: > ?Using Coq is like doing brain surgery over the telephone.? ? Peter > Hancock > > That was my experience with Coq as well. I think Agda's reflection > machinery (and the Idris' one for that matter) is highly > underappreciated, one can do wonders with it as it gives you first > class access to internals of Agda, including the ability to declare > functions, quote data type definitions, infer/check types and deal > with metavariables. The `TC` monad and the `macro` gadget are some > really nice and intuitive things. > > However library support is almost non-existing. There are several > libraries that deal with reflection (most notably the Ulf's > `agda-prelude`), but most of them (if not all) are either dead (i.e. > do not even build) or undocumented. > > I learned how to use reflection through trial and error and was able > to implement the equivalent of Haskell's `deriving Eq`, only for > decidable equality and with full support of > dependent/higher-order/indexed data types with implicits, instance > arguments, irrelevance and universe polymorphism [1], which showcases > that Agda's reflection is quite powerful. Others have implemented > ring > solvers [2] [3] [4], rewrite as a tactic [5], another `deriving Eq` > [6] and various other stuff. Still, library support of general > metaprogramming tools is lacking. I also wasn't satisfied by naked > and > raw De Bruijn indices that Agda uses for its internal representation > (which is very error-prone and inefficient) and not having static > information on how many times a term was quoted was quite unpleasant, > but these are technical details that are pretty solvable. Additional > features like defining data types using reflection also can be added. > > What is harder to fix is that Agda since its creation hadn't been > scaling well (I stopped paying attention a couple of years ago, so I > don't know whether things have changed or not). It was the case that > you could type check things in almost no time, then open some module > (without using anything from it) and wait for two minutes for type > checking to finish. People have reported that their projects required > a dozen or two of GBs of RAM. Even something as simple as printing a > natural number had terrible performance (I think it even was > exponential?) for many years (which has been fixed rather recently). > I > can't count for how many times I was thinking "ok, I'll wait a bit > more and kill the process". It is quite discouraging to develop > something for months just to figure out that you can only test it on > completely trivial things, because otherwise type checking won't > finish. Again, I don't know whether the situation has been improved > in > recent years. > > So for me performance was a deal breaker, not theoretical > limitations. > > Does Agda still implement call-by-name reduction strategy (as opposed > to call-by-need)? > > [1] https://github.com/effectfully/Generic/ > [2] https://oisdk.github.io/agda-ring-solver/README.html > [3] > https://github.com/agda/agda-stdlib/blob/master/src/Algebra/Solver/Ring.agda > [4] > https://github.com/UlfNorell/agda-prelude/blob/master/test/DeriveEqTest.agda > [5] > https://github.com/UlfNorell/agda-prelude/blob/master/test/Reright.agda > [6] > https://github.com/UlfNorell/agda-prelude/blob/master/test/DeriveEqTest.agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From fdhzs2010 at hotmail.com Sun Aug 4 03:28:42 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sun, 4 Aug 2019 01:28:42 +0000 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: <911b0ec65f9f9ccb50a28785624a853f21f6d998.camel@cs.tufts.edu> References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> , <911b0ec65f9f9ccb50a28785624a853f21f6d998.camel@cs.tufts.edu> Message-ID: my coin here is to point out that it is not necessary that Coq beats Agda by far in development speed. It turns out that Coq and Agda are good at problems in their specific domains. for example, due to dependent pattern matching, Agda does better job at proofs requiring large chunks of inversions; in those cases, there won't even be cases generated. another domain in which Agda beats Coq is when complex inductive scheme is necessary. termination checker in Agda is significantly more permissive than Coq's. Agda permits mutual simultaneous induction while in Coq, proving such kind of inductive schemes requires significant effort. Equations shows very good potential to fill up but at this moment, Equations is still too buggy to take the role. not to mention that its lack of Emacs interaction. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of Xuanrui Qi Sent: August 3, 2019 8:03 PM To: Roman ; Nils Anders Danielsson Cc: agda at lists.chalmers.se Subject: Re: [Agda] Using Agda in proving computer system correct Metaprogramming is a powerful tool and Agda/Idris style metaprogramming is enough to implement a powerful tactic system like Coq's. For this matter, Idris has the library Pruviloj ( https://github.com/idris-lang/Idris-dev/tree/master/libs/pruviloj) that works basically like Mtac, although Pruviloj is still pretty limited at the current point (mainly due to the lack of active development effort). Agda's reflection mechanism is certainly strong enough for one to do the same, but I agree that the main problem here is the lack of library support. For example, AFAIK there's no mechanism in Agda that works like like elaborator reflection in Idris. Sure we can do the same things using Agda's reflection mechanism, but with a lot of extra effort. Of course, we all hope that one day we would have a programming language/proof assistant that works equally well as a dependently-typed programming language and as a (tactic-based) interactive theorem prover. We already have a lot of work towards this (e.g. Program and Equations in Coq to improve DTP, elborator reflection in Idris & reflection in Agda to support tactics-style reasoning). But what we really need now, IMO, is better tool support for all of this. -Xuanrui On Sun, 2019-08-04 at 00:11 +0300, Roman wrote: > ?Using Coq is like doing brain surgery over the telephone.? ? Peter > Hancock > > That was my experience with Coq as well. I think Agda's reflection > machinery (and the Idris' one for that matter) is highly > underappreciated, one can do wonders with it as it gives you first > class access to internals of Agda, including the ability to declare > functions, quote data type definitions, infer/check types and deal > with metavariables. The `TC` monad and the `macro` gadget are some > really nice and intuitive things. > > However library support is almost non-existing. There are several > libraries that deal with reflection (most notably the Ulf's > `agda-prelude`), but most of them (if not all) are either dead (i.e. > do not even build) or undocumented. > > I learned how to use reflection through trial and error and was able > to implement the equivalent of Haskell's `deriving Eq`, only for > decidable equality and with full support of > dependent/higher-order/indexed data types with implicits, instance > arguments, irrelevance and universe polymorphism [1], which showcases > that Agda's reflection is quite powerful. Others have implemented > ring > solvers [2] [3] [4], rewrite as a tactic [5], another `deriving Eq` > [6] and various other stuff. Still, library support of general > metaprogramming tools is lacking. I also wasn't satisfied by naked > and > raw De Bruijn indices that Agda uses for its internal representation > (which is very error-prone and inefficient) and not having static > information on how many times a term was quoted was quite unpleasant, > but these are technical details that are pretty solvable. Additional > features like defining data types using reflection also can be added. > > What is harder to fix is that Agda since its creation hadn't been > scaling well (I stopped paying attention a couple of years ago, so I > don't know whether things have changed or not). It was the case that > you could type check things in almost no time, then open some module > (without using anything from it) and wait for two minutes for type > checking to finish. People have reported that their projects required > a dozen or two of GBs of RAM. Even something as simple as printing a > natural number had terrible performance (I think it even was > exponential?) for many years (which has been fixed rather recently). > I > can't count for how many times I was thinking "ok, I'll wait a bit > more and kill the process". It is quite discouraging to develop > something for months just to figure out that you can only test it on > completely trivial things, because otherwise type checking won't > finish. Again, I don't know whether the situation has been improved > in > recent years. > > So for me performance was a deal breaker, not theoretical > limitations. > > Does Agda still implement call-by-name reduction strategy (as opposed > to call-by-need)? > > [1] https://github.com/effectfully/Generic/ > [2] https://oisdk.github.io/agda-ring-solver/README.html > [3] > https://github.com/agda/agda-stdlib/blob/master/src/Algebra/Solver/Ring.agda > [4] > https://github.com/UlfNorell/agda-prelude/blob/master/test/DeriveEqTest.agda > [5] > https://github.com/UlfNorell/agda-prelude/blob/master/test/Reright.agda > [6] > https://github.com/UlfNorell/agda-prelude/blob/master/test/DeriveEqTest.agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Sun Aug 4 10:08:13 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sun, 4 Aug 2019 16:08:13 +0800 Subject: [Agda] Raw algebraic structures in the standard library Message-ID: Dear all, This is a question for anyone who uses the raw algebraic structures from the standard library. Currently `RawMagma`, `RawMonoid`, `RawRing` etc. contain no axioms whatsoever. We're not entirely convinced this is the right approach as without proofs that _?_ is an equivalence, and that _?_ is congruent with respect to it then it is impossible to do any reasoning at all about them. In order to make them more useful we're considering changing their definitions so that they include the equality axioms above. Basically the question is does anyone have a use case for the raw structures in which the equality axioms would be problematic to provide? Best, Matthew -------------- next part -------------- An HTML attachment was scrubbed... URL: From marko at dimjasevic.net Mon Aug 5 10:56:54 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Mon, 05 Aug 2019 10:56:54 +0200 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: <2d308cb24d33d7748fea3fcbd05cca7fef985ce1.camel@dimjasevic.net> On Sat, 2019-08-03 at 21:22 +0200, Nils Anders Danielsson wrote: > On 03/08/2019 10.05, Marko Dimja?evi? wrote: > > Is it due to sub-optimal automated proof search? > > I don't know what the people you talked to had in mind, but this > could > be one thing. What would you recommend for reading about Agda's support for automated proof search? What is its current state? > Libraries might be another. Do you have any specific libraries in mind that would be useful for proving properties of non-trivial computer systems? Do they exist and if so, what kind of improvements they could use? -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID: 056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From nad at cse.gu.se Mon Aug 5 15:28:17 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 5 Aug 2019 15:28:17 +0200 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: On 03/08/2019 23.11, Roman wrote: > It was the case that you could type check things in almost no time, > then open some module (without using anything from it) and wait for > two minutes for type checking to finish. If you have some example where Agda exhibits terrible performance, please report it on the bug tracker. > People have reported that their projects required a dozen or two of > GBs of RAM. I have written on the order of 100?000 lines of Agda code, and I think I can typecheck all of it (excluding pieces that have bit-rotted) using less than 3 GB of RAM. > Even something as simple as printing a natural number had terrible > performance (I think it even was exponential?) for many years (which > has been fixed rather recently). This was a library issue, rather than a more fundamental problem, right? (Not that libraries aren't important.) > Again, I don't know whether the situation has been improved in recent > years. There have been lots of improvements over the years, but things can be improved further. > Does Agda still implement call-by-name reduction strategy (as opposed > to call-by-need)? Here's the abstract of a talk Ulf Norell gave at AIM XXVII: "Since the olden days, Agda has been using a substitution-based call-by-name evaluation strategy with all the associated problems. In this talk I will describe my efforts to bring Agda into the late 1980's: introducing the Agda Abstract Machine. The abstract machine is an environment-based call-by-need machine, solving both the substitution problem and the call-by-name issue. Some interesting challenges are introduced by the fact that we evaluate open terms, and are constrained by the existing term representation of Agda." However, call-by-name has not been removed entirely. -- /NAD From nad at cse.gu.se Mon Aug 5 15:31:33 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 5 Aug 2019 15:31:33 +0200 Subject: [Agda] plfa preservation + progresss => eval termination checking failure in Agda 2.6.1? In-Reply-To: References: Message-ID: <979c2a7f-c119-427b-bda1-5e7811cf88a4@cse.gu.se> On 16/07/2019 01.05, Dan Krejsa wrote: > Is this an intentional change in the termination checking? My guess is that this is related to the removal of with inlining: https://github.com/agda/agda/pull/3794 -- /NAD From nad at cse.gu.se Mon Aug 5 15:39:45 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 5 Aug 2019 15:39:45 +0200 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: <41d1e2e5-c3ef-b6b7-11e3-c11c68739294@cs.bham.ac.uk> References: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> <41d1e2e5-c3ef-b6b7-11e3-c11c68739294@cs.bham.ac.uk> Message-ID: On 03/08/2019 22.40, Martin Escardo wrote: > On 03/08/2019 20:19, nad at cse.gu.se wrote: >> On 02/08/2019 23.13, Martin Escardo wrote: >>> I copied the tree .cabal from Ubuntu 16.04 to 18.04, given that both >>> run ghc 8.0.2, and given that I kept my fingers crossed. >> >> What did you copy? > > 1804:~$ mv .cabal cabal-1804 > 1804:~$ cp -a /<16.04-partition>/home/mhe/.cabal cabal-1604 > 1804:~$ ln -s ~/cabal-1604 .cabal OK. This makes me wonder what libraries the two installations use. Can you run "ghc-pkg describe Agda-2.6.0.1", first with cabal-1604 active, and then with cabal-1804? I'm interested in the "depends" section. -- /NAD From jon at jonmsterling.com Mon Aug 5 16:27:24 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Mon, 05 Aug 2019 10:27:24 -0400 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: On Mon, Aug 5, 2019, at 9:28 AM, Nils Anders Danielsson wrote: > On 03/08/2019 23.11, Roman wrote: > > It was the case that you could type check things in almost no time, > > then open some module (without using anything from it) and wait for > > two minutes for type checking to finish. > > If you have some example where Agda exhibits terrible performance, > please report it on the bug tracker. > > > People have reported that their projects required a dozen or two of > > GBs of RAM. > > I have written on the order of 100?000 lines of Agda code, and I think I > can typecheck all of it (excluding pieces that have bit-rotted) using > less than 3 GB of RAM. > > > Even something as simple as printing a natural number had terrible > > performance (I think it even was exponential?) for many years (which > > has been fixed rather recently). > > This was a library issue, rather than a more fundamental problem, right? > (Not that libraries aren't important.) > > > Again, I don't know whether the situation has been improved in recent > > years. > > There have been lots of improvements over the years, but things can be > improved further. > > > Does Agda still implement call-by-name reduction strategy (as opposed > > to call-by-need)? > > Here's the abstract of a talk Ulf Norell gave at AIM XXVII: > > "Since the olden days, Agda has been using a substitution-based > call-by-name evaluation strategy with all the associated problems. In > this talk I will describe my efforts to bring Agda into the late > 1980's: introducing the Agda Abstract Machine. The abstract machine is > an environment-based call-by-need machine, solving both the > substitution problem and the call-by-name issue. Some interesting > challenges are introduced by the fact that we evaluate open terms, and > are constrained by the existing term representation of Agda." > This sounds like a fascinating talk; are there any notes or slides available? Thank you, Jon > However, call-by-name has not been removed entirely. > > -- > /NAD > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From guillaume.allais at ens-lyon.org Mon Aug 5 16:31:40 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Mon, 5 Aug 2019 15:31:40 +0100 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: <8443a2cf-314f-5630-c5a5-88240a669420@ens-lyon.org> Hi Jon, The implementation has a lot of comments: https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Reduce/Fast.hs Cheers, -- gallais On 05/08/2019 15:27, Jon Sterling wrote: > > > On Mon, Aug 5, 2019, at 9:28 AM, Nils Anders Danielsson wrote: >> On 03/08/2019 23.11, Roman wrote: >>> It was the case that you could type check things in almost no time, >>> then open some module (without using anything from it) and wait for >>> two minutes for type checking to finish. >> >> If you have some example where Agda exhibits terrible performance, >> please report it on the bug tracker. >> >>> People have reported that their projects required a dozen or two of >>> GBs of RAM. >> >> I have written on the order of 100?000 lines of Agda code, and I think I >> can typecheck all of it (excluding pieces that have bit-rotted) using >> less than 3 GB of RAM. >> >>> Even something as simple as printing a natural number had terrible >>> performance (I think it even was exponential?) for many years (which >>> has been fixed rather recently). >> >> This was a library issue, rather than a more fundamental problem, right? >> (Not that libraries aren't important.) >> >>> Again, I don't know whether the situation has been improved in recent >>> years. >> >> There have been lots of improvements over the years, but things can be >> improved further. >> >>> Does Agda still implement call-by-name reduction strategy (as opposed >>> to call-by-need)? >> >> Here's the abstract of a talk Ulf Norell gave at AIM XXVII: >> >> "Since the olden days, Agda has been using a substitution-based >> call-by-name evaluation strategy with all the associated problems. In >> this talk I will describe my efforts to bring Agda into the late >> 1980's: introducing the Agda Abstract Machine. The abstract machine is >> an environment-based call-by-need machine, solving both the >> substitution problem and the call-by-name issue. Some interesting >> challenges are introduced by the fact that we evaluate open terms, and >> are constrained by the existing term representation of Agda." >> > > This sounds like a fascinating talk; are there any notes or slides available? > > Thank you, > Jon > > >> However, call-by-name has not been removed entirely. >> >> -- >> /NAD >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From carette at mcmaster.ca Mon Aug 5 17:17:43 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Mon, 5 Aug 2019 11:17:43 -0400 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: <5ab44564d97a7e4921ed3796d4a0a9402f01e60d.camel@cs.tufts.edu> References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> <5ab44564d97a7e4921ed3796d4a0a9402f01e60d.camel@cs.tufts.edu> Message-ID: <10e3a6b9-5812-4b72-69dd-4f37ba2415a3@mcmaster.ca> I can't help but comment on a mis-perception in this particular message earlier in this thread: On 2019-08-03 4:47 p.m., Xuanrui Qi wrote: > Also, it's widely agreed that tactic-based proofs and backwards > reasoning are definitely more suited for large-scale proof efforts. As > a result, most if not all large mechanized computer system > verifications proof efforts use proof assistants with LCF-style tactic > language (CompCert and CertiKOS in Coq, seL4 in Isabelle, CakeML in > HOL4, etc.) It used to be "widely agreed" that dependent types were too hard for doing anything of any size - this has been thoroughly debunked. Same with the meta-theory of binders. Lots of hard work had to be done to figure out 'how to do it', but out of that hard work techniques were distilled so that it no longer is so hard. Tactics originate from the LCF view of proofs as abstract objects that you cannot reach in to; they are 'proof transformers'. And they are absolutely necessary if your proofs are in Prop. And having proofs in Prop itself originates from classical mathematical ideas that "proofs have no content" and the "widely agreed" (!) idea that carrying irrelevant proofs around will produce a system that is much too slow. But, well, Agda's notion of proof, as embedded as specific terms in Set, is not proof-irrelevant. And, lo and behold, dependent pattern-matching makes that extremely useful! All of a sudden, what used to be complicated tactics are now just normal programs. This is a major advance. (See http://r6.ca/blog/20171008T222703Z.html for reflections of a Coq expert 'discovering' this.) Having said that, there does remain issues worthy of further research IMHO: 1. ssreflect-style reflection, or the "local approach" to reflection. There really are times when a domain has decision procedures based on the *syntax* of its terms based on some (usually quotiented) term-algebra; think polynomials over Nat and their normal form as a decision procedure for semirings [i.e. pure arithmetic induces proofs via an interpretation]. Calling these 'tactics' obscures much of the reason for the power of the method. 2. global style reflection (see the work of William M. Farmer). For when you want to embed all of your language. This is what MetaCoq is trying too. 3. "sufficient lazyness" -- i.e. figuring out when both values (which can be proofs) and control paths are no longer needed, and just erasing them. [See https://arxiv.org/abs/1907.13227 but also http://sci-hub.tw/10.1145/115866.115890 which links back to ideas of #2 for really interesting ideas from generic PL in that direction] 4. more automation. Yes, it is painful to do a case-split into > 100 cases [yes, I have such code], where only 4 require a non-trivial sub-proof [and even then], and the rest of the ~100 cases are just 'refl'. Or maybe the answer isn't automation, it's some eta-like rule for inductive types -- who knows. I've been reading some Coq proofs (blech) for some stuff in category theory; the correspond Agda proofs tend to be shorter and way (way!) more limpid. Jacques From mechvel at scico.botik.ru Mon Aug 5 17:23:51 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 05 Aug 2019 18:23:51 +0300 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> Message-ID: <669bbf00863dd6af190931659ae7aa3f@scico.botik.ru> On 2019-08-05 16:28, Nils Anders Danielsson wrote: > On 03/08/2019 23.11, Roman wrote: >> It was the case that you could type check things in almost no time, >> then open some module (without using anything from it) and wait for >> two minutes for type checking to finish. > > If you have some example where Agda exhibits terrible performance, > please report it on the bug tracker. > >> People have reported that their projects required a dozen or two of >> GBs of RAM. > > I have written on the order of 100?000 lines of Agda code, and I think > I > can typecheck all of it (excluding pieces that have bit-rotted) using > less than 3 GB of RAM. There is the DoCon-A library for algebra (see it on the Web) which cannot be type-checked by Agda in less than 13 Gb memory. I have reported of this earlier. Probably this library is larger than other libraries in Agda, but it is much smaller than many other libraries for computer algebra. I am not sure, I suspect that this unnatural type check cost is due to some deficiency in the type checker design/implementation. Because everything looks natural in the library code itself. >> Even something as simple as printing a natural number had terrible >> performance (I think it even was exponential?) for many years (which >> has been fixed rather recently). > > This was a library issue, rather than a more fundamental problem, > right? > (Not that libraries aren't important.) Indeed, this is a library issue. * Regularly, Natural needs to be represented in Agda as a list of macro-digits, and still some small number of operations on a macro-digit will need to be built-in. * Also in lib-1.1 printing a natural number in decimal digits is fast, this is due to a built-in division with remainder. -- SM From carette at mcmaster.ca Mon Aug 5 17:38:39 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Mon, 5 Aug 2019 11:38:39 -0400 Subject: [Agda] Raw algebraic structures in the standard library In-Reply-To: References: Message-ID: On 2019-08-04 4:08 a.m., Matthew Daggitt wrote: > Dear all, > ?This is a question for anyone who uses the raw algebraic structures > from the standard library. Currently `RawMagma`, `RawMonoid`, > `RawRing` etc. contain no axioms whatsoever. We're not entirely > convinced this is the right approach as without proofs that _?_ is an > equivalence, and that _?_?is congruent with respect to it then it is > impossible to do any reasoning at all about them. In order to make > them more useful we're considering changing their definitions so that > they include the equality axioms above. > > Basically the question is does anyone have a use case for the raw > structures in which the equality axioms would be problematic to provide? My understanding (which is perhaps wrong) is that the whole point of the Raw* structures is to do Haskell-like computations, where one is visibly not carrying around any extra proof baggage, 'by construction'. These computations work in a 'trust me' environment. Ideally one would work with Magma, Monoid, Ring, etc, but without knowing for sure that all proofs will be considered irrelevant [so that they don't interfere with computation time], it's tempting to just hand-erase all those pesky proofs, just to be sure. In other words, you're not supposed to reason with the Raw* structures. You just compute with them. And if the answer is wrong, well, you get what you deserve, as you skipped the proofs. [If you get a wrong answer from a computation that was induced from building a RawMonoid from a Monoid, and some kind of proper 'function' similarly obtained by a forgetful morphism, *that* would be a serious bug]. Jacques PS: I consider the human-written Raw* structures to be a hack for efficiency [possibly strongly needed]; to me, these should be produced by an 'erase' meta-program applied to structures and morphisms. Eventually, even that ought to disappear, when some meta-theorem can be "proved" that this is not even necessary. That may not be soon. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Mon Aug 5 18:58:40 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 05 Aug 2019 19:58:40 +0300 Subject: [Agda] Raw algebraic structures in the standard library In-Reply-To: References: Message-ID: <5cdb62378432e6c2de937129ba3241f9@scico.botik.ru> On 2019-08-04 11:08, Matthew Daggitt wrote: > Dear all, > This is a question for anyone who uses the raw algebraic structures > from the standard library. Currently `RawMagma`, `RawMonoid`, > `RawRing` etc. contain no axioms whatsoever. We're not entirely > convinced this is the right approach as without proofs that _?_ is > an equivalence, and that _?_ is congruent with respect to it then it > is impossible to do any reasoning at all about them. In order to make > them more useful we're considering changing their definitions so that > they include the equality axioms above. > > Basically the question is does anyone have a use case for the raw > structures in which the equality axioms would be problematic to > provide? > Best, > Matthew > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda If you require the axioms of equivalence or/and congruence for _?_ and _?_ for RawMagma, then it will turn out that RawMagma is same as Magma. And further, this approach leads to eliminating the Raw structures -- ? I thought that the Raw records are introduced to represent and consider the signatures as not provided with any properties besides those induced automatically by a non-dependent type signature (I never thought of this, is it true that they deal with non-dependent types?). For example, foo : Carrier -> Nat automatically postulates that foo returns a member of Nat and not of Bool, and the type checker checks this property, and dependent types are not needed for this. -- SM From m.escardo at cs.bham.ac.uk Mon Aug 5 21:50:20 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Mon, 5 Aug 2019 20:50:20 +0100 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: References: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> <41d1e2e5-c3ef-b6b7-11e3-c11c68739294@cs.bham.ac.uk> Message-ID: <9143887c-2fbd-d9db-2025-056b12d406fa@cs.bham.ac.uk> On 05/08/2019 14:39, nad at cse.gu.se wrote: > On 03/08/2019 22.40, Martin Escardo wrote: >> On 03/08/2019 20:19, nad at cse.gu.se wrote: >>> On 02/08/2019 23.13, Martin Escardo wrote: >>>> I copied the tree .cabal from Ubuntu 16.04 to 18.04, given that both >>>> run ghc 8.0.2, and given that I kept my fingers crossed. >>> >>> What did you copy? >> >> 1804:~$ mv .cabal cabal-1804 >> 1804:~$ cp -a /<16.04-partition>/home/mhe/.cabal cabal-1604 >> 1804:~$ ln -s ~/cabal-1604 .cabal > > OK. This makes me wonder what libraries the two installations use. Can > you run "ghc-pkg describe Agda-2.6.0.1", first with cabal-1604 active, > and then with cabal-1804? I'm interested in the "depends" section. I am afraid this is not finding the information you want: 1804:~$ rm .cabal 1804:~$ ln -s ~/cabal-1604/ .cabal 1804:~$ ghc-pkg describe Agda-2.6.0.1 ghc-pkg: cannot find package Agda-2.6.0.1 1804:~$ agda --version Agda version 2.6.0.1 14:~$ rm .cabal 1804:~$ ln -s ~/cabal-1804/ .cabal 1804:~$ hash -r 1804:~$ ghc-pkg describe Agda-2.6.0.1 ghc-pkg: cannot find package Agda-2.6.0.1 1804:~$ ls .ghc/ ghci_history 1804:~$ which agda /home/mhe/.cabal/bin/agda 1804:~$ agda --version Agda version 2.6.0.1 Martin From guillaume.allais at ens-lyon.org Tue Aug 6 10:21:34 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 6 Aug 2019 09:21:34 +0100 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: <10e3a6b9-5812-4b72-69dd-4f37ba2415a3@mcmaster.ca> References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> <5ab44564d97a7e4921ed3796d4a0a9402f01e60d.camel@cs.tufts.edu> <10e3a6b9-5812-4b72-69dd-4f37ba2415a3@mcmaster.ca> Message-ID: Re your 4th point: you may find a view useful in this scenario. Here is a proof of concept where such a view is used to define a proof of decidable equality of size linear in the number of constructors rather than quadratic. https://github.com/gallais/potpourri/blob/37e312d9b2b9c95158759754ef1b4a9fdd5f5565/agda/poc/LinearDec.agda I have also played a bit with software foundations' IMP language, trying to keep the programs & proofs as short as possible given that (AFAIK) this is the part of SF where Coq's automation is supposedly leading to much shorter proofs. In my limited experience, this seems to be true but views do help us keep things tractable: https://github.com/gallais/potpourri/blob/master/agda/sf/Imp.agda Best, -- gallais On 05/08/2019 16:17, Jacques Carette wrote: > I can't help but comment on a mis-perception in this particular message earlier > in this thread: > > On 2019-08-03 4:47 p.m., Xuanrui Qi wrote: >> Also, it's widely agreed that tactic-based proofs and backwards >> reasoning are definitely more suited for large-scale proof efforts. As >> a result, most if not all large mechanized computer system >> verifications proof efforts use proof assistants with LCF-style tactic >> language (CompCert and CertiKOS in Coq, seL4 in Isabelle, CakeML in >> HOL4, etc.) > > It used to be "widely agreed" that dependent types were too hard for doing > anything of any size - this has been thoroughly debunked. Same with the > meta-theory of binders. Lots of hard work had to be done to figure out 'how to > do it', but out of that hard work techniques were distilled so that it no longer > is so hard. > > Tactics originate from the LCF view of proofs as abstract objects that you > cannot reach in to; they are 'proof transformers'. And they are absolutely > necessary if your proofs are in Prop. And having proofs in Prop itself > originates from classical mathematical ideas that "proofs have no content" and > the "widely agreed" (!) idea that carrying irrelevant proofs around will produce > a system that is much too slow. > > But, well, Agda's notion of proof, as embedded as specific terms in Set, is not > proof-irrelevant. And, lo and behold, dependent pattern-matching makes that > extremely useful! All of a sudden, what used to be complicated tactics are now > just normal programs. This is a major advance. (See > http://r6.ca/blog/20171008T222703Z.html for reflections of a Coq expert > 'discovering' this.) > > Having said that, there does remain issues worthy of further research IMHO: > 1. ssreflect-style reflection, or the "local approach" to reflection. There > really are times when a domain has decision procedures based on the *syntax* of > its terms based on some (usually quotiented) term-algebra; think polynomials > over Nat and their normal form as a decision procedure for semirings [i.e. pure > arithmetic induces proofs via an interpretation]. Calling these 'tactics' > obscures much of the reason for the power of the method. > 2. global style reflection (see the work of William M. Farmer). For when you > want to embed all of your language. This is what MetaCoq is trying too. > 3. "sufficient lazyness" -- i.e. figuring out when both values (which can be > proofs) and control paths are no longer needed, and just erasing them. [See > https://arxiv.org/abs/1907.13227 but also > http://sci-hub.tw/10.1145/115866.115890 which links back to ideas of #2 for > really interesting ideas from generic PL in that direction] > 4. more automation. Yes, it is painful to do a case-split into > 100 cases [yes, > I have such code], where only 4 require a non-trivial sub-proof [and even then], > and the rest of the ~100 cases are just 'refl'. Or maybe the answer isn't > automation, it's some eta-like rule for inductive types -- who knows. > > I've been reading some Coq proofs (blech) for some stuff in category theory; the > correspond Agda proofs tend to be shorter and way (way!) more limpid. > > Jacques > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From guillaume.allais at ens-lyon.org Tue Aug 6 11:00:12 2019 From: guillaume.allais at ens-lyon.org (Guillaume Allais) Date: Tue, 6 Aug 2019 10:00:12 +0100 Subject: [Agda] plfa preservation + progresss => eval termination checking failure in Agda 2.6.1? In-Reply-To: References: Message-ID: Just had the same experience. Note that turning `Gas` into a record rather than a datatype definition solves this problem. On 16/07/2019 00:05, Dan Krejsa wrote: > Hi, > > I'm (slowly) working through Philip Wadler's PLFA course. > I happen to be using Agda 2.6.1, from the git 'master' branch at commit > d8449caf816e0c5e13419ee2d3fe32a047ec3db8, > and I ran into a termination checking failure in the 'eval' function in the > Properties.lagda chapter. > > This version (from the text) > > eval : ? {L A} > ? Gas > ? ? ? L ? A > --------- > ? Steps L > eval {L} (gas zero) ?L = steps (L ?) > out-of-gas > eval {L} (gas (suc m)) ?L with progress ?L > ... | done VL = steps (L ?) (done > VL) > ... | step L??M with eval (gas m) (preserve ?L L??M) > ... | steps M??N fin = steps (L ??? L??M > ? M??N) fin > > fails termination checking. Note that 'Gas' is just a type that holds a > natural number: > > data Gas : Set where > gas : ? ? Gas > > However, if one just replaces Gas with ? in the function, the termination > checker is happy: > > eval : ? {L A} > ? ? > ? ? ? L ? A > --------- > ? Steps L > eval {L} zero ?L = steps (L ?) out-of-gas > eval {L} (suc m) ?L with progress ?L > ... | done VL = steps (L ?) (done VL) > ... | step L??M with eval m (preserve ?L L??M) > ... | steps M??N fin = steps (L ??? L??M ? > M??N) fin > > Is this an intentional change in the termination checking? > > - Dan > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: OpenPGP digital signature URL: From mattam at mattam.org Tue Aug 6 14:53:29 2019 From: mattam at mattam.org (Matthieu Sozeau) Date: Tue, 6 Aug 2019 08:53:29 -0400 Subject: [Agda] Using Agda in proving computer system correct In-Reply-To: <10e3a6b9-5812-4b72-69dd-4f37ba2415a3@mcmaster.ca> References: <8fc16a79554411e41e2014cf20121c9b3c6c2303.camel@dimjasevic.net> <5ab44564d97a7e4921ed3796d4a0a9402f01e60d.camel@cs.tufts.edu> <10e3a6b9-5812-4b72-69dd-4f37ba2415a3@mcmaster.ca> Message-ID: Hi everyone, Interesting discussion! I don?t think you need to be a brain surgeon to program in Coq (I wouldn?t trust an arbitrary Coq user with my brain in any case :), but it?s true it can easily be misused (the video-game effect of the tactic mode in particular can be pretty bad). In my opinion however what is true for Coq is also true for Agda, type theory cannot scale up to large verification problems without good abstractions: whether they are robust tactic languages avoiding the nitty-gritty of proof terms (maintaining an Agda development written without abstractions by someone else is not more fun or easy than a fragile Coq proof script), or using the highly-expressive type systems we have to express ideas concisely and efficiently. I think these two can work hand-in-hand actually: an example being the treatment of views and the reflect predicate of ssreflect in Coq for example, which leverages dependent elimination and computation and integrates it with a tactic language construct to seamlessly move between different specifications about a given function. Likewise, the rewrite construct of Agda, provides a higher-level ?tactic? during programming, inferring a rewriting predicate and applying it using the eliminator of equality, just like the rewrite tactic of Coq does. Abstractions can be costly to compilers but I would guess the main differences in performance between Agda on one side and Coq and Lean on the other side would rather be in the conversion / reduction algorithms and in unification, where they are mostly incomparable right now, although getting closer in some respects (e.g. the use of abstract to block reductions). Le lun. 5 ao?t 2019 ? 11:17, Jacques Carette a ?crit : > I can't help but comment on a mis-perception in this particular message > earlier in this thread: > > On 2019-08-03 4:47 p.m., Xuanrui Qi wrote: > > Also, it's widely agreed that tactic-based proofs and backwards > > reasoning are definitely more suited for large-scale proof efforts. As > > a result, most if not all large mechanized computer system > > verifications proof efforts use proof assistants with LCF-style tactic > > language (CompCert and CertiKOS in Coq, seL4 in Isabelle, CakeML in > > HOL4, etc.) > > It used to be "widely agreed" that dependent types were too hard for > doing anything of any size - this has been thoroughly debunked. Same > with the meta-theory of binders. Lots of hard work had to be done to > figure out 'how to do it', but out of that hard work techniques were > distilled so that it no longer is so hard. > > Tactics originate from the LCF view of proofs as abstract objects that > you cannot reach in to; they are 'proof transformers'. And they are > absolutely necessary if your proofs are in Prop. And having proofs in > Prop itself originates from classical mathematical ideas that "proofs > have no content" and the "widely agreed" (!) idea that carrying > irrelevant proofs around will produce a system that is much too slow. For what it?s worth, despite having proofs in Prop in Coq (or Lean), they are still around in memory (albeit blocked by Qeds usually, and sometimes lazily loaded from disk). So the view of Prop as a bracket of Type, reconciling with the Agda/HoTT-style view of proofs as by default relevant (and maybe just squashed/truncated explicitely when irrelevance/erasure matters or impredicativity is used) would not change much w.r.t. the space efficiency story ? a definionally proof-irrelevant sort (OTT?s Prop, SProp) does change the time-efficiency story significantly however, as terms standing for proof terms (in SProp) must never be converted in this case. Also, Agda uses call-by-name or call-by-need reduction (Coq uses a variant of call-by-need in its default conversion algorithm), so unfolding of proofs usually happens only if necessary and they shouldn?t differ much (the devil?s in the details of course). But, well, Agda's notion of proof, as embedded as specific terms in Set, > is not proof-irrelevant. And, lo and behold, dependent pattern-matching > makes that extremely useful! All of a sudden, what used to be > complicated tactics are now just normal programs. This is a major > advance. (See http://r6.ca/blog/20171008T222703Z.html for reflections of > a Coq expert 'discovering' this.) > > Having said that, there does remain issues worthy of further research IMHO: > 1. ssreflect-style reflection, or the "local approach" to reflection. > There really are times when a domain has decision procedures based on > the *syntax* of its terms based on some (usually quotiented) > term-algebra; think polynomials over Nat and their normal form as a > decision procedure for semirings [i.e. pure arithmetic induces proofs > via an interpretation]. Calling these 'tactics' obscures much of the > reason for the power of the method. > 2. global style reflection (see the work of William M. Farmer). For when > you want to embed all of your language. This is what MetaCoq is trying too. > 3. "sufficient lazyness" -- i.e. figuring out when both values (which > can be proofs) and control paths are no longer needed, and just erasing > them. [See https://arxiv.org/abs/1907.13227 but also > http://sci-hub.tw/10.1145/115866.115890 which links back to ideas of #2 > for really interesting ideas from generic PL in that direction] > 4. more automation. Yes, it is painful to do a case-split into > 100 > cases [yes, I have such code], where only 4 require a non-trivial > sub-proof [and even then], and the rest of the ~100 cases are just > 'refl'. Or maybe the answer isn't automation, it's some eta-like rule > for inductive types -- who knows. I think the view pattern can help here, using dependent elimination to let the typechecker know only a handful of cases are interesting and the rest are treated the same, e.g. using predicates of the form: data MyCases : MyType -> Set where interesting a b : MyCases (foo a b) interesting2 : MyCases bar notsointeresting m : ~ (is_foo_or_bar m) -> MyCases m. Then: mycases m : MyCases m mycases (foo a b) = ... mycases bar = ... mycases other = notsointeresting m refl You?ll do a full case split one time only this way. Again it?s a matter of using the right tool for the job, and type theory provides plenty of options! I guess Coq gives more options to brute force such proofs using the tactic language, but in the long term such methods don?t scale well. Best, ? Matthieu -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Tue Aug 6 15:42:41 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Tue, 06 Aug 2019 16:42:41 +0300 Subject: [Agda] GCD in future standard library Message-ID: Dear standard library developers, this is on developing the algebra part of the standard library. In the _master_ library branch, we come now to treating GCD for the new Bin representation. And this touches the question of possible generic GCD notion. The two approaches are possible, and I need to agree on this point. First, consider the GCD notion itself, without relating it to the computation method. In the current _master_ library there are the three very similar numeric domains: ?, Bin, ?. ? is isomorphic to Bin, and most methods for ? are reduced to those for ? in a simple way, without loss of efficiency. I think, also ?b needs to join -- binary represented integers. For most algorithms, we cannot use the to?/from? isomorphism to compute things on Bin (for example, divMod, gcd). Because this isomorphism is expensive to compute relatively to the method itself (even by using certain built-in primitives). The approach of lib-1.1 is as follows. * There are declared the two _notions_ of GCD: for ? and for ?, and there needs to appear the third GCD notion -- for Bin. * There is no provision for the GCD notion for other domains, for example, for polynomials over a domain with gcd. This design does not look natural. We need now to choice between the two approaches. I. To continue the lib-1.1 design: to declare one more GCD notion -- Bin.GCD, and to compute Bin.gcd by using Bin.divMod. II. A generic approach, which I suggest. 1) To add to Algebra.agda the declaration of a cancellative semiring: record CancellativeSemiring ? ? : Set _ where field CommutativeSemiring : CommutativeSemiring ? ? ... field _?_ : Decidable _?_ lnzCancel : LeftNZCancellative LeftNZCancellative means the Cancellative property already defined in the _master_ library, only it adds the condition x ? 0# for the element being cancelled. 2) The GCD notion is defined in the module parameterized by R : CancellativeSemiring _ _: record GCD (a b : Carrier) : Set _ -- a result of gcd where constructor gcd? field proper : Carrier -- proper gcd value divides? : proper ? a divides? : proper ? b greatest : ? {d} ? (d ? a) ? (d ? b) ? (d ? proper) It is similar to the definitions existing in lib-1.1, only it is generic. Also in this module are declared the general notions of IsPrime, Coprime. All this is expressed very simply. 3) The domains ?, ?, Bin are already actually provided in the _master_ lib with the instances of CancellativeSemiring, because the cancellation law by nonzero is already implemented there for these domains. Hence the above GCD declaration becomes type-checked and ready to work, and it will replace the three special GCD declarations in the _master_ lib. Also it is ready to work in many other domains. 4) About computation of GCD. Assume that we have chosen the above generic notion of GCD. For ?, ?, Bin, ?b there is known a simple method which is also reasonably efficient: an Euclidean algorithm. This method is also applicable to all Euclidean domains. For the multivariate polynomial domain R[x1..xn] for a GCD-domain R, the Euclidean method is not correct. But * the above generic notion of GCD is valid there, * CA libraries apply several more complex methods that have a reasonable efficiency. Now, consider GCD computing only for ?, ?, Bin, and other Euclidean domains. The standard library _needs_ to implement at least the first tree. Integer.gcd can be trivially reduced to computing Nat.GCD.gcd, probably this is done so in lib-1.1 (is it?). Bin.GCD.gcd has to be implemented separately, because the conversion ? <--> Bin is expensive. For ? and Bin, we need to define the notion(s) of DivMod (division with remainder), to implement the algorithm(s) of divMod, and implement GCD by applying divMod in recursion. We need to choose between the two approaches. 4.1. Declare the DivMod notion separately for ? and Bin. Also the library needs DivMod for ?, independently on computing GCD. So, we shall have the three declared notions of DivMod, the two algorithms for the divMod implementation, and the two implementations of GCD. 4.2. In the environment of CancellativeSemiring described above to introduce a general notion record EuclideanSemiring _ where C = Carrier field norm : Norm open Norm norm field divMod : C ? (y : C) ? y ? 0# ? C ? C divModEq< : (a b : C) ? (nzb : b ? 0#) ? let (q , r) = divMod a b nzb in a ? (q * b) + r ? ((nzr : r ? 0#) ? ? r ,, nzr ? < ? b ,, nzb ?) A _norm_ ?_,,_? : (x : C) ? x ? 0# ? ? is a certain operation on nonzero elements (with a couple of certain declared laws). Examples: For ? it can be set identic, for ? it can be set absolute value, for the univariate polynomial domain it can be set the _degree_. This is a generic notion of DivMod. It covers the instances of ?, ?, Bin, ?b, univariate polynomial domain over any field, Gaussian integers, and some others. It also makes it easy to provide a common gcd implementation for all these domains. In textbooks, they define _Euclidean domain_ for this purpose. But unfortunately this requires to inherit a Ring. And this does not cover the case of ?, because ? is not of Ring. Therefore I suggest a slight generalization: the above EuclideanSemiring. But there are needed the four additional axioms in EuclideanSemiring which are not in textbooks. They are specific to Agda: congruence of norm and of quotient, and irrelevance on the proof for x ? 0# for norm and quotient. Summing up all the above, I suggest the following steps in developing the library. 1. To declare the generic divisibility notion _?_ for Magma (this is simple). To implement the generic GCD notion for a CancellativeSemiring, as above. To remove the existing special definitions for divisibility and GCD. 2. To have the three special definitions Nat.DivMod.DivMod, Integer.DivMod.DivMod, Bin.DivMod.DivMod, and the two different implementations for the corresponding divMod, the two different implementations for the corresponding gcd. 3. After this is settled, to decide whether to change to the above EuclideanSemiring and thus to arrange a common implementation for GCD for ?, ?, Bin, ?b, and other domains of EuclideanSemiring. The first two points are verified, they are presented by a tested workable code, which is also simple. The generic branch in the third point can be verified later, if we decide to try it (currently I doubt about keeping the code simple). Please, consider the suggestion. Regards, ------ Sergei From mechvel at scico.botik.ru Tue Aug 6 20:57:49 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Tue, 06 Aug 2019 21:57:49 +0300 Subject: [Agda] GCD in future standard library In-Reply-To: References: Message-ID: On 2019-08-06 16:42, mechvel at scico.botik.ru wrote: > [..] > > > II. A generic approach, which I suggest. > > 1) To add to Algebra.agda the declaration of a cancellative semiring: > > record CancellativeSemiring ? ? : Set _ > where > field CommutativeSemiring : CommutativeSemiring ? ? > ... > field _?_ : Decidable _?_ > lnzCancel : LeftNZCancellative > > LeftNZCancellative means the Cancellative property already defined in > the _master_ library, only it adds the > condition x ? 0# for the element being cancelled. > > 2) The GCD notion is defined in the module parameterized by R : > CancellativeSemiring _ _: > > record GCD (a b : Carrier) : Set _ -- a result of gcd > where > constructor gcd? > field proper : Carrier -- proper gcd value > divides? : proper ? a > divides? : proper ? b > greatest : ? {d} ? (d ? a) ? (d ? b) ? (d ? proper) I need to explain how does it appear the condition of CancellativeSemiring. In textbooks, the GCD notion is defined in the environment of IntegralDomain (S.Lang. Algebra (1965) chapter II, paragraph 4). IntegralDomain is a CommutativeRing without zero divisors (x*y ? 0 ==> x ? 0 or y ? 0). This is needed, for example, to provide a certain uniqueness of GCD. For example, in Integer, 2 and (-2) both fit as GCD 2 4, but they differ in an invertible factor (-1). In this sense GCD needs to be unique: unique modulo multiplication by invertible factors. This uniqueness is derived from the condition of IntegralDomain. It also derived from the condition of CancellativeSemiring. CancellativeSemiring is used in my proposal instead of IntegralDomain because ? is not of a Ring, hence not of IntegralDomain. But it needs a GCD instance similar as ?, and it is of a CancellativeSemiring. Mathematicians use a general GCD notion for IntegralDomain, and also use a separate notion of GCD for ?, even without noticing that formally the latter GCD is not a special case for the former GCD. People do not pay attention to this, and this does not lead to bad effects because ? is a sub-semiring in ?, and ? is of IntegralDomain. But in Agda, we need to respect formalities: either to explicitly define two corresponding different GCD notions or generalize further the generic definition. So, I generalize it to CancellativeSemiring. Sorry for the two lengthy messages. ------ Sergei From benedikt.ahrens at gmail.com Tue Aug 6 17:49:04 2019 From: benedikt.ahrens at gmail.com (Benedikt Ahrens) Date: Tue, 6 Aug 2019 11:49:04 -0400 Subject: [Agda] 2-year postdoc position on type theory in Birmingham (UK) Message-ID: Dear all, I would like to invite applications for a 2-year postdoctoral position at the University of Birmingham, School of Computer Science. The postdoctoral researcher will work with Paige Randall North (Ohio State University) and me on a topic in the area of (homotopy) type theory; details can be discussed. The position is funded by the EPSRC grant "A theory of type theories", PI Benedikt Ahrens. The starting date of the position is somewhat flexible; it should be between late 2019 and mid 2020. How to apply ============ There is no official job opening yet. Interested people are encouraged to contact me by email (b.ahrens at cs.bham.ac.uk) in the first instance to discuss their research interests and details of the position. About Birmingham ================ The School of Computer Science has a large and thriving Theoretical Computer Science research group, with a particular focus on category theory and its applications to the logical foundations of computer science. Among our research interests are: - category theory and higher category theory; - type theory; - homotopy type theory and univalent foundations; - formal proof; - lambda-calculus and computational effects; - topology and domain theory; - constructive mathematics; - quantum computing; - semantics; - program compilation. Our group currently has 12 permanent staff and more than a dozen PhD students. We have a weekly seminar, as well as more informal meetings and reading groups. Information on all of this can be found on our webpage: http://www.cs.bham.ac.uk/research/groupings/theory/ We are regularly hosting international events in theoretical computer science in general and type theory in particular; recently, this included CSL 2018, 6WFTop, School and Workshop on Univalent Mathematics, and Midlands Graduate School. Please also distribute this advertisement to others who might be interested. Best wishes, Benedikt From matthewdaggitt at gmail.com Thu Aug 8 12:36:32 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 8 Aug 2019 18:36:32 +0800 Subject: [Agda] GCD in future standard library In-Reply-To: References: Message-ID: Hi Sergei, As your message is primarily discussing changes to the standard library and is aimed at the standard library maintainers, you should talk about this on the standard library Github repository. You've already opened an issue here which could be used to discuss it. Best, Matthew On Wed, Aug 7, 2019 at 2:57 AM wrote: > On 2019-08-06 16:42, mechvel at scico.botik.ru wrote: > > [..] > > > > > > II. A generic approach, which I suggest. > > > > 1) To add to Algebra.agda the declaration of a cancellative semiring: > > > > record CancellativeSemiring ? ? : Set _ > > where > > field CommutativeSemiring : CommutativeSemiring ? ? > > ... > > field _?_ : Decidable _?_ > > lnzCancel : LeftNZCancellative > > > > LeftNZCancellative means the Cancellative property already defined in > > the _master_ library, only it adds the > > condition x ? 0# for the element being cancelled. > > > > 2) The GCD notion is defined in the module parameterized by R : > > CancellativeSemiring _ _: > > > > record GCD (a b : Carrier) : Set _ -- a result of gcd > > where > > constructor gcd? > > field proper : Carrier -- proper gcd value > > divides? : proper ? a > > divides? : proper ? b > > greatest : ? {d} ? (d ? a) ? (d ? b) ? (d ? proper) > > > I need to explain how does it appear the condition of > CancellativeSemiring. > In textbooks, the GCD notion is defined in the environment of > IntegralDomain > (S.Lang. Algebra (1965) chapter II, paragraph 4). > IntegralDomain is a CommutativeRing without zero divisors (x*y ? 0 ==> x > ? 0 or y ? 0). > This is needed, for example, to provide a certain uniqueness of GCD. > For example, in Integer, 2 and (-2) both fit as GCD 2 4, but they > differ in an invertible factor (-1). > In this sense GCD needs to be unique: unique modulo multiplication by > invertible factors. > This uniqueness is derived from the condition of IntegralDomain. > It also derived from the condition of CancellativeSemiring. > > CancellativeSemiring is used in my proposal instead of IntegralDomain > because ? is not of a Ring, hence not of > IntegralDomain. But it needs a GCD instance similar as ?, and it is of a > CancellativeSemiring. > > Mathematicians use a general GCD notion for IntegralDomain, and also use > a separate notion of GCD for ?, even without noticing that formally the > latter GCD is not a special case for the former GCD. People do not pay > attention to this, > and this does not lead to bad effects because ? is a sub-semiring in ?, > and ? is of IntegralDomain. > > But in Agda, we need to respect formalities: either to explicitly define > two corresponding different GCD notions > or generalize further the generic definition. So, I generalize it to > CancellativeSemiring. > > Sorry for the two lengthy messages. > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Thu Aug 8 12:55:15 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Thu, 8 Aug 2019 18:55:15 +0800 Subject: [Agda] Raw algebraic structures in the standard library In-Reply-To: <5cdb62378432e6c2de937129ba3241f9@scico.botik.ru> References: <5cdb62378432e6c2de937129ba3241f9@scico.botik.ru> Message-ID: Thanks Jacques, that's a great explanation of their function and explains a lot. I have to confess I haven't seen any programs that do such "raw" computation, but I can see why they would be useful. Hmm maybe the algebraic structures with just equality axioms need to be added as another level of between the two existing levels. Maybe "raw", "medium" and "well-done" is the way to go :) Sergei, yes if we made the previously proposed change then RawMagma would be equivalent to Magma but the rest of the hierarchy would diverge. RawMagma would not be equivalent to Semigroup as it would lack associativity, likewise RawMonoid would not be equivalent to Monoid. I'm afraid I don't understand your second question. On Tue, Aug 6, 2019 at 12:58 AM wrote: > On 2019-08-04 11:08, Matthew Daggitt wrote: > > Dear all, > > This is a question for anyone who uses the raw algebraic structures > > from the standard library. Currently `RawMagma`, `RawMonoid`, > > `RawRing` etc. contain no axioms whatsoever. We're not entirely > > convinced this is the right approach as without proofs that _?_ is > > an equivalence, and that _?_ is congruent with respect to it then it > > is impossible to do any reasoning at all about them. In order to make > > them more useful we're considering changing their definitions so that > > they include the equality axioms above. > > > > Basically the question is does anyone have a use case for the raw > > structures in which the equality axioms would be problematic to > > provide? > > Best, > > Matthew > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > If you require the axioms of equivalence or/and congruence for _?_ and > _?_ for RawMagma, > then it will turn out that RawMagma is same as Magma. And further, this > approach leads to eliminating the Raw structures > -- ? > > I thought that the Raw records are introduced to represent and consider > the signatures as not provided with any properties besides those induced > automatically by a non-dependent type signature > (I never thought of this, is it true that they deal with non-dependent > types?). > For example, foo : Carrier -> Nat automatically postulates that foo > returns a member of Nat and not of Bool, and the type checker checks > this property, and dependent types are not needed for this. > > -- > SM > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Thu Aug 8 15:59:45 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Thu, 08 Aug 2019 16:59:45 +0300 Subject: [Agda] Raw algebraic structures in the standard library In-Reply-To: References: <5cdb62378432e6c2de937129ba3241f9@scico.botik.ru> Message-ID: <5680dde163ccf78374840063c4131301@scico.botik.ru> On 2019-08-08 13:55, Matthew Daggitt wrote: > [..] > Sergei, yes if we made the previously proposed change then RawMagma > would be equivalent to Magma but the rest of the > hierarchy would > diverge. RawMagma would not be equivalent to Semigroup as it would lack > associativity, likewise > RawMonoid would not be equivalent to Monoid. I'm afraid I don't > understand your second question. I presumed that as you consider moving the _?_ laws and the congruence law for _?_ to RawMagma, then you are probably going to bring the laws for _?_ to RawSemigroup (associativity), and so on. If not, then do you consider moving other congruence laws to the Raw structures? So far, I see only ?-cong, but there may appear others. Also what about the "resp" laws? They are somewhat similar (<-resp-? ...). -- SM > On Tue, Aug 6, 2019 at 12:58 AM wrote: > >> On 2019-08-04 11:08, Matthew Daggitt wrote: >>> Dear all, >>> This is a question for anyone who uses the raw algebraic >> structures >>> from the standard library. Currently `RawMagma`, `RawMonoid`, >>> `RawRing` etc. contain no axioms whatsoever. We're not entirely >>> convinced this is the right approach as without proofs that _?_ >> is >>> an equivalence, and that _?_ is congruent with respect to it >> then it >>> is impossible to do any reasoning at all about them. In order to >> make >>> them more useful we're considering changing their definitions so >> that >>> they include the equality axioms above. >>> >>> Basically the question is does anyone have a use case for the raw >>> structures in which the equality axioms would be problematic to >>> provide? >>> Best, >>> Matthew >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> >> If you require the axioms of equivalence or/and congruence for _?_ >> and >> _?_ for RawMagma, >> then it will turn out that RawMagma is same as Magma. And further, >> this >> approach leads to eliminating the Raw structures >> -- ? >> >> I thought that the Raw records are introduced to represent and >> consider >> the signatures as not provided with any properties besides those >> induced >> automatically by a non-dependent type signature >> (I never thought of this, is it true that they deal with >> non-dependent >> types?). >> For example, foo : Carrier -> Nat automatically postulates that >> foo >> returns a member of Nat and not of Bool, and the type checker checks >> >> this property, and dependent types are not needed for this. >> >> -- >> SM From calderon at fing.edu.uy Fri Aug 9 21:51:59 2019 From: calderon at fing.edu.uy (Guillermo Calderon) Date: Fri, 9 Aug 2019 16:51:59 -0300 Subject: [Agda] How to convert literate agda markdown to pdf with syntax-highligting Message-ID: Dear all: If I have a file foo.lagda.md, I can use pandoc to generate a pdf: ``` $ pandoc --standalone foo.lagda.md -o foo.langda.pdf ``` This works but the agda code is poorly highlighted by pandoc/latex. Is it posible to apply the latex backend of Agda to highlight the code in the document? I so, what would be the approppriate sequence of pandoc/agda commands to obtain this goal? Thanks in advance. Best regards, Guillermo From Jesper at sikanda.be Sun Aug 11 11:35:22 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Sun, 11 Aug 2019 11:35:22 +0200 Subject: [Agda] How to convert literate agda markdown to pdf with syntax-highligting In-Reply-To: References: Message-ID: Hi Guillermo, There does not seem to be an official way to do this at the moment, but the following seems to work (at least on a small test file): ``` pandoc --standalone test.lagda.md -o test2.lagda.tex agda --latex test2.lagda.tex pdflatex latex/test2.tex ``` Note that you cannot choose the file name `test.lagda.tex` since Agda detects a conflict between two modules with the same name. Perhaps Agda could be extended to support this use case in a more native way, feel free to create a feature request on the bug tracker at https://github.com/agda/agda/issues. -- Jesper On Fri, Aug 9, 2019 at 9:53 PM Guillermo Calderon wrote: > Dear all: > > If I have a file foo.lagda.md, I can use pandoc to generate a pdf: > > ``` > $ pandoc --standalone foo.lagda.md -o foo.langda.pdf > ``` > > This works but the agda code is poorly highlighted by pandoc/latex. > > > Is it posible to apply the latex backend of Agda to highlight the code > in the document? > > I so, what would be the approppriate sequence of pandoc/agda commands > to obtain this goal? > > Thanks in advance. > Best regards, > > Guillermo > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From klin at mimuw.edu.pl Mon Aug 12 11:42:22 2019 From: klin at mimuw.edu.pl (Bartek Klin) Date: Mon, 12 Aug 2019 11:42:22 +0200 Subject: [Agda] FoPSS'19: Summer School on Foundations of Programming and Software Systems Message-ID: FINAL CALL FOR PARTICIPATION: FoPPS 2019: Nominal Techniques 3rd Summer School on Foundations of Programming and Software Systems 10-15 September, Warsaw, Poland https://www.mimuw.edu.pl/~fopss19/ ================================================================== The 2019 Alonzo Church Award was given to M. J. Gabbay and A. M. Pitts for their ground-breaking work on nominal sets. (https://siglog.org/winners-of-the-2019-alonzo-church-award/) Do you want to learn what that was about? Come to FoPSS 2019! ================================================================== The Summer School on Foundations of Programming and Software Systems (FoPSS) was jointly created by EATCS, ETAPS, ACM SIGLOG and ACM SIGPLAN. It was first organised in 2017. The goal is to introduce the participants to various aspects of computation theory and programming languages. The school, spread over a single week, is aimed at students and researchers in Theoretical Computer Science, broadly construed. Each year the school is focused on a particular, actively researched topic. Our focus in 2019 are Nominal Techniques in Computer Science. For the introduction and cornerstone contributions to this area Murdoch J. Gabbay and Andrew M. Pitts received the 2019 Alonzo Church Award. Both of them are among the lecturers of FoPSS 2019. The scientific programme of the school is available from our website: https://www.mimuw.edu.pl/~fopss19/programme.html Registration fee includes lunches, coffee breaks and accommodation in a hotel within a walking distance from the school venue. We have a few scholarships available to participants who have difficult access to funding. Registration is open! ================================================================== COLOCATED EVENT: Highlights 2019: 7th annual conference on Highlights of Logic, Games and Automata 17-20 September (http://highlights-conference.org) From calderon at fing.edu.uy Mon Aug 12 17:23:53 2019 From: calderon at fing.edu.uy (=?UTF-8?Q?Guillermo_Calder=c3=b3n?=) Date: Mon, 12 Aug 2019 12:23:53 -0300 Subject: [Agda] How to convert literate agda markdown to pdf with syntax-highligting In-Reply-To: References: Message-ID: Hi Jesper, Thanks for your answer. Unfortunately, the sequence of commands that you propose doesn't give the result that I am asking for. I try it but 1) pandoc converts agda blocks in latex code. 2) agda latex backend doesn't find any agda block to convert. 3) In addition, agda.sty doesn't seem to be compatible with latex stuff generated by pandoc. I think that something like `--html-higligth=code` is required for latex backend. I will create a feature request on the bug tracker. Best regards, Guillermo On 11/8/19 06:35, Jesper Cockx wrote: > Hi Guillermo, > > There does not seem to be an official way to do this at the moment, but > the following seems to work (at least on a small test file): > > ``` > pandoc --standalone test.lagda.md -o test2.lagda.tex > agda --latex test2.lagda.tex > pdflatex latex/test2.tex > ``` > > Note that you cannot choose the file name `test.lagda.tex` since Agda > detects a conflict between two modules with the same name. Perhaps Agda > could be extended to support this use case in a more native way, feel > free to create a feature request on the bug tracker at > https://github.com/agda/agda/issues. > > -- Jesper > > On Fri, Aug 9, 2019 at 9:53 PM Guillermo Calderon > > wrote: > > Dear all: > > If I have a file foo.lagda.md , I can use > pandoc to generate a pdf: > > ``` > $ pandoc --standalone foo.lagda.md -o > foo.langda.pdf > ``` > > This works but the agda code is poorly highlighted by pandoc/latex. > > > Is it posible to apply the latex backend of Agda to highlight the code > in the document? > > I so, what would be the approppriate sequence of pandoc/agda? commands > to obtain this goal? > > Thanks in advance. > Best regards, > > Guillermo > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From P.Achten at cs.ru.nl Thu Aug 15 13:17:23 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Thu, 15 Aug 2019 13:17:23 +0200 Subject: [Agda] [TFP'20] first call for papers: Trends in Functional Programming 2020, 13-14 February, Krakow, Poland Message-ID: ------------------------------------------------------------------------- ???????????????????? First call for papers ??????? 21st Symposium on Trends in Functional Programming ????????????????????????? tfp2020.org ------------------------------------------------------------------------- The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions. * TFP is moving to new winter dates, to provide an FP forum in between the ? annual ICFP events. * TFP offers a supportive reviewing process designed to help less experienced ? authors succeed, with two rounds of review, both before and after the ? symposium itself. Authors have an opportunity to address reviewers' concerns ? before final decisions on publication in the proceedings. * TFP offers two "best paper" awards, the John McCarthy award for best paper, ? and the David Turner award for best student paper. * This year we are particularly excited to co-locate with Lambda Days in ? beautiful Krakow. Lambda Days is a vibrant developer conference with hundreds ? of attendees and a lively programme of talks on functional programming in ? practice. TFP will be held in the same venue, and participants will be able ? to session-hop between the two events. Important Dates --------------- Submission deadline for pre-symposium review:?? 15th November,??? 2019 Submission deadline for draft papers:?????????? 10th January,???? 2020 Symposium dates:??????????????????????????????? 13-14th February, 2020 Visit tfp2020.org for more information. From nad at cse.gu.se Sat Aug 17 11:41:48 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Sat, 17 Aug 2019 11:41:48 +0200 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: <9143887c-2fbd-d9db-2025-056b12d406fa@cs.bham.ac.uk> References: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> <41d1e2e5-c3ef-b6b7-11e3-c11c68739294@cs.bham.ac.uk> <9143887c-2fbd-d9db-2025-056b12d406fa@cs.bham.ac.uk> Message-ID: <3bb33fb4-620e-e9f8-66c6-bb7759925430@cse.gu.se> On 05/08/2019 21.50, Martin Escardo wrote: > 1804:~$ ghc-pkg describe Agda-2.6.0.1 > ghc-pkg: cannot find package Agda-2.6.0.1 > 1804:~$ ls .ghc/ > ghci_history If you can locate the package databases, then perhaps you can use the following command: ghc-pkg --package-db= describe Agda-2.6.0.1 -- /NAD From nad at cse.gu.se Sat Aug 17 12:08:16 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Sat, 17 Aug 2019 12:08:16 +0200 Subject: [Agda] Raw algebraic structures in the standard library In-Reply-To: References: Message-ID: <0d917072-1184-4fd9-f0a8-b180947ccae6@cse.gu.se> On 05/08/2019 17.38, Jacques Carette wrote: > My understanding (which is perhaps wrong) is that the whole point of > the Raw* structures is to do Haskell-like computations, where one is > visibly not carrying around any extra proof baggage, 'by > construction'. These computations work in a 'trust me' environment. > > Ideally one would work with Magma, Monoid, Ring, etc, but without > knowing for sure that all proofs will be considered irrelevant [so > that they don't interfere with computation time], it's tempting to > just hand-erase all those pesky proofs, just to be sure. Typically one computes with the carrier type, not the full structure. I think I included the raw structures to make it possible to use structures that do not support all the laws, or to avoid having to prove all the laws. For instance, I don't think it is possible (ignoring bugs) to prove the monad laws for the TC monad (with propositional equality as the equality relation). -- /NAD From m.escardo at cs.bham.ac.uk Sat Aug 17 22:05:46 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Sat, 17 Aug 2019 21:05:46 +0100 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: <3bb33fb4-620e-e9f8-66c6-bb7759925430@cse.gu.se> References: <60fb67bd-ee48-0ed7-cac8-e3a490a05c40@cs.bham.ac.uk> <2544beb4-6e8d-d0c5-0fc3-2ab99144ee40@cse.gu.se> <41d1e2e5-c3ef-b6b7-11e3-c11c68739294@cs.bham.ac.uk> <9143887c-2fbd-d9db-2025-056b12d406fa@cs.bham.ac.uk> <3bb33fb4-620e-e9f8-66c6-bb7759925430@cse.gu.se> Message-ID: <23af2e4a-5bdf-4579-5906-08d79a4dce38@cs.bham.ac.uk> On 17/08/2019 10:41, nad at cse.gu.se wrote: > On 05/08/2019 21.50, Martin Escardo wrote: >> 1804:~$ ghc-pkg describe Agda-2.6.0.1 >> ghc-pkg: cannot find package Agda-2.6.0.1 >> 1804:~$ ls .ghc/ >> ghci_history > > If you can locate the package databases, then perhaps you can use the > following command: > > ? ghc-pkg --package-db= describe Agda-2.6.0.1 > I tried without success. Ghc's documentation is not friendly, and Google search is not helping either. Martin From Jeremy.Dawson at anu.edu.au Sun Aug 18 15:51:55 2019 From: Jeremy.Dawson at anu.edu.au (Jeremy Dawson) Date: Sun, 18 Aug 2019 13:51:55 +0000 Subject: [Agda] using agda In-Reply-To: <20190719155550.0d836d72@debian> References: <20190718202148.620f86ca@debian> <20190719155550.0d836d72@debian> Message-ID: <133037cb-b46c-61fe-8383-4a0e7d2cc86a@anu.edu.au> Hi Caryo, Thanks. I've now upgraded to Fedora 30, including Agda package Agda-2.5.4.2-17.fc30.x86_64 With this the error message I get on trying $ agda --compile hello-world.agda is Checking hello-world (/home/jeremy/agda/hello-world.agda). /home/jeremy/agda/hello-world.agda:4,13-15 Failed to find source of module IO in any of the following locations: /home/jeremy/agda/IO.agda /home/jeremy/agda/IO.lagda /usr/share/Agda-2.5.4.2/lib/prim/IO.agda /usr/share/Agda-2.5.4.2/lib/prim/IO.lagda when scope checking the declaration open import IO When I try emacs hello-world.agda and C-c C-x C-x I get (sometimes) C-c C-x C-c is undefined and sometimes Backend (and then a funny symbol) I've looked at the page https://agda.readthedocs.io/en/latest/tools/package-system.html but it says Let?s assume you have downloaded the standard library but I haven't found anything to tell me how to do that, or, indeed, whether I have in fact done so by following the instructions at https://agda.readthedocs.io/en/latest/getting-started/installation.html which says Fedora Agda is packaged in Fedora (since before Fedora 18). yum install Agda will pull in emacs-agda-mode and ghc-Agda-devel. (does this also pull in the standard library? I don't see how to tell. If so, where would it be? The instructions at https://agda.readthedocs.io/en/latest/tools/package-system.html presuppose that I know where it is) Incidentally, it doesn't also pull in emacs-agda-mode Regards, Jeremy On 20/7/19 1:56 am, Caryo Scelus wrote: > On Fri, 19 Jul 2019 01:35:24 +0000 > Jeremy Dawson wrote: > >> Thanks. >> >> Distro is DISTRIB_DESCRIPTION="Ubuntu 16.04.4 LTS" >> >> version of agda seems to be Version: 2.4.2.5-1build1 > > And an old library; yeah, i'd say that's too old to bother fixing > (but if you really want, check out that old thread). Perhaps the most > balanced way is to install Agda from hackage (via cabal or stack); > alternatively you can try installing newer debs (from fresher ubuntu or > debian), but that obviously might run into issues. > >> I've just tried here at home, getting a similar error, distro is >> Fedora 27, agda version is Agda-2.5.2-9.fc27.x86_64 >> > > Although latest version is 2.6.x, this is more reasonably recent. Do > you experience both errors there? (first should be solvable, as i > mentioned in previous message, by setting up stdlib path/dependency) > What are messages exactly? > From Graham.Hutton at nottingham.ac.uk Mon Aug 19 11:49:42 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Mon, 19 Aug 2019 09:49:42 +0000 Subject: [Agda] MPC 2019 - Call for Participation Message-ID: Dear all, Registration is now open for the Mathematics of Program Construction (MPC) conference in Portugal. MPC 2019 will feature 15 research papers and 4 keynotes, and is co-located with Formal Methods 2019 and many other events. See you in Porto! https://tinyurl.com/MPC-Porto Best wishes, Graham Hutton Program Chair, MPC 2019 ====================================================================== *** CALL FOR PARTICIPATION -- MPC 2019 *** 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== PROGRAM: https://tinyurl.com/yxvvc5vb ACCEPTED PAPERS: https://tinyurl.com/yyuhy8ze REGISTRATION AND TRAVEL: https://tinyurl.com/y4uetlsr KEYNOTE SPEAKERS: Assia Mahboubi (MPC) INRIA, France Annabelle McIver (MPC) Macquarie University, Australia Tony Hoare (UTP) Oxford University, UK Shriram Krishnamurthi (FM) Brown University, USA BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK For any queries about the program please contact the program chair, Graham Hutton . CONFERENCE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISER: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From A.Popescu at mdx.ac.uk Mon Aug 19 15:30:02 2019 From: A.Popescu at mdx.ac.uk (Andrei Popescu) Date: Mon, 19 Aug 2019 13:30:02 +0000 Subject: [Agda] FroCoS-12 and TABLEAUX-28, London, September 2-6: second call for participation (early registration closes on August 21) Message-ID: The 2019 editions of FroCoS (the 12th International Symposium on Frontiers of Combining Systems) and TABLEAUX (the 28th International Conference on Automated Reasoning with Analytic Tableaux and Related Methods), as well as their affiliated workshops and tutorials will take place in London, at Middlesex University, on the week of September 2-6. This year we have an exciting program of contributed and invited talks, and affiliated events. Please see https://tableaux2019.org/Program_FroCoS_TABLEAUX_2019.pdf for detailed program information. Moreover, information on traveling and accommodation (including affordable accommodation for budget-constrained participants), and on the sites and activities that can be enjoyed in the Middlesex University's beautiful campus, is available from the conferences' websites: https://frocos2019.org and https://tableaux2019.org Information on registration and fees is also available from these websites. The deadline for early registration is August 21st, 2019. INVITED TALKS * Jeremy Avigad. Automated Reasoning for the Working Mathematician * Maria Paola Bonacina. Conflict-Driven Reasoning in Unions of Theories * Stephane Graham-Lengrand. Recent and Ongoing Developments of Model-Constructing Satisfiability * Stephane Graham-Lengrand and Sara Negri. Remembering Roy Dyckhoff * Uli Sattler. Modularity and Automated Reasoning in Description Logics AFFILIATED WORKSHOPS * The 25th Workshop on Automated Reasoning (ARW 2019), organized by Alexander Bolotov and Florian Kammueller * Journeys in Computational Logic: Tributes to Roy Dyckhoff, organized by Stephane Graham-Lengrand, Ekaterina Komendantskaya and Mehrnoosh Sadrzadeh AFFILIATED TUTORIALS * Formalising Concurrent Computation: CLF, Celf, and Applications by Sonia Marin * How to Build an Automated Theorem Prover -- An Introductory Tutorial (invited TABLEAUX tutorial) by Jens Otten For any questions, please contact the organizers at chair at tableaux2019.org or chair at frocos2019.org. We hope to see many of you this September in London. Best wishes, Serenella Cerrito, Andreas Herzig, Andrei Popescu and Franco Raimondi (program chairs and local organizers) -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Tue Aug 20 13:49:55 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Tue, 20 Aug 2019 19:49:55 +0800 Subject: [Agda] Raw algebraic structures in the standard library In-Reply-To: <0d917072-1184-4fd9-f0a8-b180947ccae6@cse.gu.se> References: <0d917072-1184-4fd9-f0a8-b180947ccae6@cse.gu.se> Message-ID: > > I think I included the raw structures to make it possible to use > structures that do not support all the laws, or to avoid having to prove > all the laws. For instance, I don't think it is possible (ignoring bugs) > to prove the monad laws for the TC monad (with propositional equality as > the equality relation). > Thanks for the example! Of course, it would so happen that with propositional equality then anything would trivially still fulfil the proposed new definition of the `Raw` structures. Nonetheless I think I'm convinced that maybe we need a separate set of structures rather than simply changing the existing ones. Thanks all for the input. On Sat, Aug 17, 2019 at 6:08 PM Nils Anders Danielsson wrote: > On 05/08/2019 17.38, Jacques Carette wrote: > > My understanding (which is perhaps wrong) is that the whole point of > > the Raw* structures is to do Haskell-like computations, where one is > > visibly not carrying around any extra proof baggage, 'by > > construction'. These computations work in a 'trust me' environment. > > > > Ideally one would work with Magma, Monoid, Ring, etc, but without > > knowing for sure that all proofs will be considered irrelevant [so > > that they don't interfere with computation time], it's tempting to > > just hand-erase all those pesky proofs, just to be sure. > > Typically one computes with the carrier type, not the full structure. > > I think I included the raw structures to make it possible to use > structures that do not support all the laws, or to avoid having to prove > all the laws. For instance, I don't think it is possible (ignoring bugs) > to prove the monad laws for the TC monad (with propositional equality as > the equality relation). > > -- > /NAD > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Thu Aug 22 11:56:37 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 22 Aug 2019 11:56:37 +0200 Subject: [Agda] using agda In-Reply-To: <133037cb-b46c-61fe-8383-4a0e7d2cc86a@anu.edu.au> References: <20190718202148.620f86ca@debian> <20190719155550.0d836d72@debian> <133037cb-b46c-61fe-8383-4a0e7d2cc86a@anu.edu.au> Message-ID: <205f4b3a-76b4-6e52-46e7-098086796f50@cse.gu.se> On 18/08/2019 15.51, Jeremy Dawson wrote: > I've looked at the page > https://agda.readthedocs.io/en/latest/tools/package-system.html > but it says Let?s assume you have downloaded the standard library > but I haven't found anything to tell me how to do that, or, indeed, > whether I have in fact done so by following the instructions at > https://agda.readthedocs.io/en/latest/getting-started/installation.html > which says [?] You can download the standard library from the following page: https://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary -- /NAD From Jeremy.Dawson at anu.edu.au Thu Aug 22 16:28:30 2019 From: Jeremy.Dawson at anu.edu.au (Jeremy Dawson) Date: Thu, 22 Aug 2019 14:28:30 +0000 Subject: [Agda] using agda In-Reply-To: <205f4b3a-76b4-6e52-46e7-098086796f50@cse.gu.se> References: <20190718202148.620f86ca@debian> <20190719155550.0d836d72@debian> <133037cb-b46c-61fe-8383-4a0e7d2cc86a@anu.edu.au> <205f4b3a-76b4-6e52-46e7-098086796f50@cse.gu.se> Message-ID: <0b9914f1-c8cc-8143-48e7-8042755babee@anu.edu.au> Thanks for that. I've done that, downloading the library version 0.17 since it says that works with agda version 2.5.4.2, which is what I have installed. Now agda --compile hello-world.agda produces a great deal of output, but finally Calling: ghc -O -o /home/jeremy/agda/hello-world -Werror -i/home/jeremy/agda -main-is MAlonzo.Code.QhelloZ45Zworld /home/jeremy/agda/MAlonzo/Code/QhelloZ45Zworld.hs --make -fwarn-incomplete-patterns -fno-warn-overlapping-patterns [ 1 of 70] Compiling MAlonzo.RTE ( MAlonzo/RTE.hs, MAlonzo/RTE.o ) [ 2 of 70] Compiling MAlonzo.Code.Agda.Primitive ( MAlonzo/Code/Agda/Primitive.hs, MAlonzo/Code/Agda/Primitive.o ) Compilation error: MAlonzo/Code/Agda/Primitive.hs:4:1: error: Could not find module ?Data.FFI? Use -v to see a list of the files searched for. | 4 | import qualified Data.FFI | ^^^^^^^^^^^^^^^^^^^^^^^^^ MAlonzo/Code/Agda/Primitive.hs:5:1: error: Could not find module ?IO.FFI? Use -v to see a list of the files searched for. | 5 | import qualified IO.FFI | ^^^^^^^^^^^^^^^^^^^^^^^ and trying emacs hello-world.agda gets the same result as before Thanks Jeremy On 22/8/19 7:56 pm, Nils Anders Danielsson wrote: > On 18/08/2019 15.51, Jeremy Dawson wrote: >> I've looked at the page >> https://agda.readthedocs.io/en/latest/tools/package-system.html >> but it says Let?s assume you have downloaded the standard library >> but I haven't found anything to tell me how to do that, or, indeed, >> whether I have in fact done so by following the instructions at >> https://agda.readthedocs.io/en/latest/getting-started/installation.html >> which says [?] > > You can download the standard library from the following page: > > > https://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary > From liamoc at cse.unsw.edu.au Thu Aug 22 18:52:13 2019 From: liamoc at cse.unsw.edu.au (Liam O'Connor) Date: Thu, 22 Aug 2019 18:52:13 +0200 Subject: [Agda] PhD positions with Cogent and Trustworthy Systems Message-ID: Hi all, If you have (or are) a promising undergraduate or masters student who would be interested in working with us on the lovely intersection of programming languages and formal methods, my colleague Christine has recently begun looking for PhD students.? The ad is attached below. Both of us will be in Berlin for the rest of the week (after ICFP), so feel free also to talk to us in person if you are around. Liam ? If only there were a place where I could prove theorems, change the world, and have? fun while doing it...? Sounds too good to exist?? In the Trustworthy Systems team at UNSW and Data61 that's what we do for a living. We? are the creators of seL4, the world's first fully formally verified operating system? kernel with extreme performance and strong security & correctness proofs. Our highly? international team is located on the UNSW campus, close to the beautiful beaches of? sunny Sydney, Australia, one of the world's most liveable cities.? We are offering scholarships to multiple motivated PhD students who want to join us? in Sydney, move things forward, and have a global impact.? Cogent is a language we designed that co-generates code and proofs in order to ease? the verification of systems components around seL4. Potential PhD topics include? designing and implementing new domain-specific programming languages extending? Cogent, writing formal specifications and proofs in Isabelle/HOL, developing formally? verified infrastructure for building secure systems on top of seL4, contributing to? improved proof automation and reasoning techniques, and applying formal proof to? real-world systems and tools.? To apply you should have (or be about to obtain) a bachelor degree (minimum 4 years) or? a bachelor and a masters degree in Computer Science, Mathematics, or similar. You should? also meet UNSW's minimum English requirements:? https://www.unsw.edu.au/english-requirements-policy? You should also possess a significant subset of the following skills:? - functional programming in a language like Haskell, ML, or OCaml? - first-order or higher-order formal logic? - basic experience in C? - ability and desire to quickly learn new techniques? - ability and desire to work in a larger team? If you additionally have experience? - in software verification with an interactive theorem prover such as? Isabelle/HOL, HOL4, Coq, or Agda, and/or? - with programming languages and verified or certifying compilers? you should definitely apply!? You will work with a unique world-leading combination of OS and formal methods? experts, students at undergraduate and PhD level, engineers, and researchers from? 5 continents, speaking over 15 languages.? Trustworthy Systems is a fun, creative, and welcoming workplace with flexible? hours & work arrangements.? We value diversity in all forms and welcome applications from people of all ages,? including people with disabilities, and those who identify as LGBTIQ. See? https://ts.data61.csiro.au/diversity/?for more information.? For applying, email us on a copy of your CV,? cover letter, transcripts, and contact information for two referees.? This round of applications closes?on the 1st of September 2019.? For any questions on these positions, please contact Christine Rizkallah? ? The Cogent project is open source.? Check it out at?https://ts.data61.csiro.au/projects/TS/cogent.pml? -------------- next part -------------- An HTML attachment was scrubbed... URL: From publicityifl at gmail.com Mon Aug 26 16:28:41 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Mon, 26 Aug 2019 07:28:41 -0700 Subject: [Agda] First call for participation for IFL 2019 (Implementation and Application of Functional Languages) Message-ID: Hello, Please, find below the first call for participation for IFL 2019. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Publicity Chair of IFL ================================================================================ IFL 2019 31st Symposium on Implementation and Application of Functional Languages National University of Singapore September 25th-27th, 2019 http://2019.iflconference.org ================================================================================ ### Scope The goal of the IFL symposia is to bring together researchers actively engaged in the implementation and application of functional and function-based programming languages. IFL 2019 will be a venue for researchers to present and discuss new ideas and concepts, work in progress, and publication-ripe results related to the implementation and application of functional languages and function-based programming. Topics of interest to IFL include, but are not limited to: - language concepts - type systems, type checking, type inferencing - compilation techniques - staged compilation - run-time function specialization - run-time code generation - partial evaluation - (abstract) interpretation - metaprogramming - generic programming - automatic program generation - array processing - concurrent/parallel programming - concurrent/parallel program execution - embedded systems - web applications - (embedded) domain specific languages - security - novel memory management techniques - run-time profiling performance measurements - debugging and tracing - virtual/abstract machine architectures - validation, verification of functional programs - tools and programming techniques - (industrial) applications ### Keynote Speaker * Olivier Danvy, Yale-NUS College ### Submissions and peer-review Differently from previous editions of IFL, IFL 2019 solicits two kinds of submissions: * Regular papers (12 pages including references) * Draft papers for presentations ('weak' limit between 8 and 15 pages) Regular papers will undergo a rigorous review by the program committee, and will be evaluated according to their correctness, novelty, originality, relevance, significance, and clarity. A set of regular papers will be conditionally accepted for publication. Authors of conditionally accepted papers will be provided with committee reviews along with a set of mandatory revisions. Regular papers not accepted for publication will be considered as draft papers, at the request of the author. Draft papers will be screened to make sure that they are within the scope of IFL, and will be accepted for presentation or rejected accordingly. Prior to the symposium: Authors of conditionally accepted papers and accepted presentations will submit a pre-proceedings version of their work that will appear in the draft proceedings distributed at the symposium. The draft proceedings does not constitute a formal publication. We require that at least one of the authors present the work at IFL 2019. After the symposium: Authors of conditionally accepted papers will submit a revised versions of their paper for the formal post-proceedings. The program committee will assess whether the mandatory revisions have been adequately addressed by the authors and thereby determines the final accept/reject status of the paper. Our interest is to ultimately accept all conditionally accepted papers. If you are an author of a conditionally accepted paper, please make sure that you address all the concerns of the reviewers. Authors of accepted presentations will be given the opportunity to incorporate the feedback from discussions at the symposium and will be invited to submit a revised full article for the formal post-proceedings. The program committee will evaluate these submissions according to their correctness, novelty, originality, relevance, significance, and clarity, and will thereby determine whether the paper is accepted or rejected. ### Publication The formal proceedings will appear in the International Conference Proceedings Series of the ACM Digital Library. At no time may work submitted to IFL be simultaneously submitted to other venues; submissions must adhere to ACM SIGPLAN's republication policy: http://www.sigplan.org/Resources/Policies/Republication ### Important dates Submission of regular papers: June 15, 2019 Submission of draft papers: August 1, 2019 Regular papers notification: August 1, 2019 Regular draft papers notification: August 7, 2019 Deadline for early registration: August 31, 2019 Submission of pre-proceedings version: September 15, 2019 IFL Symposium: September 25-27, 2019 Submission of papers for post-proceedings: November 30, 2019 Notification of acceptance: January 31, 2020 Camera-ready version: February 29, 2020 ### Submission details All contributions must be written in English. Papers must use the ACM two columns conference format, which can be found at: http://www.acm.org/publications/proceedings-template Authors submit through EasyChair: https://easychair.org/conferences/?conf=ifl2019 ### Peter Landin Prize The Peter Landin Prize is awarded to the best paper presented at the symposium every year. The honored article is selected by the program committee based on the submissions received for the formal review process. The prize carries a cash award equivalent to 150 Euros. ### Organization and Program committee Chairs: Jurrien Stutterheim (Standard Chartered Bank Singapore), Wei Ngan Chin (National University of Singapore) Program Committee: - Olaf Chitil, University of Kent - Clemens Grelck, University of Amsterdam - Daisuke Kimura, Toho University - Pieter Koopman, Radboud University - Tam?s Kozsik, E?tv?s Lor?nd University - Roman Leschinskiy, Facebook - Ben Lippmeier, The University of New South Wales - Marco T. Morazan, Seton Hall University - Sven-Bodo Scholz, Heriot-Watt University - Tom Schrijvers, Katholieke Universiteit Leuven - Alejandro Serrano, Utrecht University - Tony Sloane, Macquarie University - Simon Thompson, University of Kent - Marcos Viera, Universidad de la Rep?blica - Wei Ngan Chin, NUS - Jurri?n Stutterheim, Standard Chartered Bank ### Venue The 31st IFL is organized by the National University of Singapore. Singapore is located in the heart of South-East Asia, and the city itself is extremely well connected by trains and taxis. See the website for more information on the venue. ### Acknowledgments This call-for-papers is an adaptation and evolution of content from previous instances of IFL. We are grateful to prior organizers for their work, which is reused here. A part of IFL 2019 format and CFP language that describes conditionally accepted papers has been adapted from call-for-papers of OOPSLA conferences. -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Tue Aug 27 20:25:22 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Tue, 27 Aug 2019 21:25:22 +0300 Subject: [Agda] Repository with executable agda code. Message-ID: Finding executable programs written in agda is a rare. There is no point after all to execute something. :) Maybe we could create a repository with free software written in agda. I know that people do write such software, but they never make it public, or easily retrievable. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Tue Aug 27 22:53:59 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Tue, 27 Aug 2019 23:53:59 +0300 Subject: [Agda] Repository with executable agda code. In-Reply-To: References: Message-ID: On 2019-08-27 21:25, Apostolis Xekoukoulotakis wrote: > Finding executable programs written in agda is a rare. There is no > point after all to execute something. :) > > Maybe we could create a repository with free software written in agda. > I know that people do write such software, but they never make it > public, or easily retrievable. > For example, various libraries are pointed at on https://wiki.portal.chalmers.se/agda/pmwiki.php?n=Main.Libraries I believe they are easily retrievable. -- SM From guillaume.brunerie at gmail.com Wed Aug 28 14:29:58 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Wed, 28 Aug 2019 14:29:58 +0200 Subject: [Agda] How does unification work? Message-ID: Hi all, I have a (rather big) example of two terms u and v which each take about 20 seconds and not much memory to fully normalize (the results is about 30 000 lines long), but checking whether reflexivity has type u == v exhaust all of the memory of my computer (25G). With Agda 2.5.3, the same example does not take much memory at all, but takes several minutes, much longer than simply computing both normal forms. The high memory usage is already present in Agda 2.5.4.1. I?m trying to shrink the example but I?m wondering if it?s expected that checking whether two terms are definitionally equal can take much longer and/or much more memory than normalizing them and comparing the normal forms. My naive understanding of the algorithm for checking definitional equality is as follows (at least for types without eta): - check whether the two terms are syntactically equal (unless using the option --no-syntactic-equality), return True if they are - reduce both terms to weak-head normal form, if the heads differ then return False, otherwise recursively check definitional equality of the arguments pairwise. Is this more or less correct? If we do not have eta, then it seems to me that in the worst case scenario, checking definitional equality is more or less as expensive as normalizing both sides, but it shouldn?t be considerably more expensive. Is eta the problem, then? Or am I missing something else? Best, Guillaume -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Wed Aug 28 14:43:29 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Wed, 28 Aug 2019 14:43:29 +0200 Subject: [Agda] How does unification work? In-Reply-To: References: Message-ID: A difference is that when normalizing you stay in the abstract machine until you reach a normal form, but when checking equality, each whnf step runs in a separate instance of the machine. This means that you lose sharing between steps, which could explain the behaviour you're seeing. / Ulf On Wed, Aug 28, 2019 at 2:30 PM Guillaume Brunerie < guillaume.brunerie at gmail.com> wrote: > Hi all, > > I have a (rather big) example of two terms u and v which each take about > 20 seconds and not much memory to fully normalize (the results is about 30 > 000 lines long), but checking whether reflexivity has type u == v exhaust > all of the memory of my computer (25G). With Agda 2.5.3, the same example > does not take much memory at all, but takes several minutes, much longer > than simply computing both normal forms. The high memory usage is already > present in Agda 2.5.4.1. > > I?m trying to shrink the example but I?m wondering if it?s expected that > checking whether two terms are definitionally equal can take much longer > and/or much more memory than normalizing them and comparing the normal > forms. > > My naive understanding of the algorithm for checking definitional equality > is as follows (at least for types without eta): > - check whether the two terms are syntactically equal (unless using the > option --no-syntactic-equality), return True if they are > - reduce both terms to weak-head normal form, if the heads differ then > return False, otherwise recursively check definitional equality of the > arguments pairwise. > > Is this more or less correct? If we do not have eta, then it seems to me > that in the worst case scenario, checking definitional equality is more or > less as expensive as normalizing both sides, but it shouldn?t be > considerably more expensive. > > Is eta the problem, then? Or am I missing something else? > > Best, > Guillaume > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From publicityifl at gmail.com Wed Aug 28 17:21:38 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Wed, 28 Aug 2019 08:21:38 -0700 Subject: [Agda] First call for draft papers for TFPIE 2020 (Trends in Functional Programming in Education) Message-ID: Hello, Please, find below the final call for draft papers for TFPIE 2020. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Chair of TFPIE 2020 ======================================================================== TFPIE 2020 Call for papers http://www.staff.science.uu.nl/~hage0101/tfpie2020/index.html February 12th 2020, Krakow, Poland (co-located with TFP 2020 and Lambda Days) TFPIE 2020 welcomes submissions describing techniques used in the classroom, tools used in and/or developed for the classroom and any creative use of functional programming (FP) to aid education in or outside Computer Science. Topics of interest include, but are not limited to: FP and beginning CS students FP and Computational Thinking FP and Artificial Intelligence FP in Robotics FP and Music Advanced FP for undergraduates FP in graduate education Engaging students in research using FP FP in Programming Languages FP in the high school curriculum FP as a stepping stone to other CS topics FP and Philosophy The pedagogy of teaching FP FP and e-learning: MOOCs, automated assessment etc. Best Lectures - more details below In addition to papers, we are requesting best lecture presentations. What's your best lecture topic in an FP related course? Do you have a fun way to present FP concepts to novices or perhaps an especially interesting presentation of a difficult topic? In either case, please consider sharing it. Best lecture topics will be selected for presentation based on a short abstract describing the lecture and its interest to TFPIE attendees. The length of the presentation should be comparable to that of a paper. On top of the lecture itself, the presentation can also provide commentary on the lecture. Submissions Potential presenters are invited to submit an extended abstract (4-6 pages) or a draft paper (up to 20 pages) in EPTCS style. The authors of accepted presentations will have their preprints and their slides made available on the workshop's website. Papers and abstracts can be submitted via easychair at the following link: https://easychair.org/conferences/?conf=tfpie2020 . After the workshop, presenters will be invited to submit (a revised version of) their article for review. The PC will select the best articles that will be published in the Electronic Proceedings in Theoretical Computer Science (EPTCS). Articles rejected for presentation and extended abstracts will not be formally reviewed by the PC. Dates Submission deadline: January 14th 2020, Anywhere on Earth. Notification: January 17th 2020 TFPIE Registration Deadline: January 20th 2020 Workshop: February 12th 2020 Submission for formal review: April 19th 2020, Anywhere on Earth. Notification of full article: June 6th 2020 Camera ready: July 1st 2020 Program Committee Olaf Chitil - University of Kent Youyou Cong - Tokyo Institute of Technology Marko van Eekelen - Open University of the Netherlands and Radboud University Nijmegen Jurriaan Hage (Chair) - Utrecht University Marco T. Morazan - Seton Hall University, USA Sharon Tuttle - Humboldt State University, USA Janis Voigtlaender - University of Duisburg-Essen Viktoria Zsok - Eotvos Lorand University Note: information on TFP is available at http://www.cse.chalmers.se/~rjmh/tfp/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From m.escardo at cs.bham.ac.uk Wed Aug 28 21:45:32 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Wed, 28 Aug 2019 20:45:32 +0100 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: References: Message-ID: FYI, If one installs ghc-8.6.5 from ppa:hvr/ghc in Ubuntu 18.04, one gets the same type checking time as in 16.04 after reinstalling Agda. Martin On 02/08/2019 20:17, Martin Escardo wrote: > I accidentally discovered the following (because I booted in an old > partition to try to find a file, and then kept working on that partition): > > A certain Agda file type checks in a core i5 Dell laptop 7th generation > > ?* In 70 seconds in Ubuntu 18.04 LTS > ?* In 50 seconds in Ubuntu 16.04 LTS > > I couldn't believe this, and so I tested this in a core i5 HP laptop 6th > generation. The results where, respectively, > > ? * 70+delta > ? * 50+delta' > > with the deltas < 3sec. > > Of course we can try to blame the Intel bugs and their fixes for that. > But, still, both 16.04 and 18.04 are long-term support versions and are > supposed to incorporate the fixes. > > In the four 2x2 cases, Haskell 8.0.2 and Agda 2.6.0.1 are used. Also, in > both cases nothing else is running in user space. > > Can anybody reproduce this? > > This is a significant difference: 50/70 is 70% of the time in 16.04. Way > faster. > > Martin > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From guillaume.brunerie at gmail.com Thu Aug 29 15:58:26 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Thu, 29 Aug 2019 15:58:26 +0200 Subject: [Agda] How does unification work? In-Reply-To: References: Message-ID: Thanks Ulf, that may explain the difference between checking equality and normalizing both sides, but does it explain the difference in behavior between Agda 2.5.3 and Agda 2.5.4? (the latter uses a very large amount of memory and the former does not) While trying to isolate the issue, I obtained a test file which works fine in Agda 2.5.4 but uses a lot of memory in Agda 2.6.0 (so not the same issue, but a very similar one). I reported it here: https://github.com/agda/agda/issues/4044 Best, Guillaume Den ons 28 aug. 2019 kl 14:44 skrev Ulf Norell : > > A difference is that when normalizing you stay in the abstract machine until you reach a normal form, but when > checking equality, each whnf step runs in a separate instance of the machine. This means that you lose sharing > between steps, which could explain the behaviour you're seeing. > > / Ulf > > On Wed, Aug 28, 2019 at 2:30 PM Guillaume Brunerie wrote: >> >> Hi all, >> >> I have a (rather big) example of two terms u and v which each take about 20 seconds and not much memory to fully normalize (the results is about 30 000 lines long), but checking whether reflexivity has type u == v exhaust all of the memory of my computer (25G). With Agda 2.5.3, the same example does not take much memory at all, but takes several minutes, much longer than simply computing both normal forms. The high memory usage is already present in Agda 2.5.4.1. >> >> I?m trying to shrink the example but I?m wondering if it?s expected that checking whether two terms are definitionally equal can take much longer and/or much more memory than normalizing them and comparing the normal forms. >> >> My naive understanding of the algorithm for checking definitional equality is as follows (at least for types without eta): >> - check whether the two terms are syntactically equal (unless using the option --no-syntactic-equality), return True if they are >> - reduce both terms to weak-head normal form, if the heads differ then return False, otherwise recursively check definitional equality of the arguments pairwise. >> >> Is this more or less correct? If we do not have eta, then it seems to me that in the worst case scenario, checking definitional equality is more or less as expensive as normalizing both sides, but it shouldn?t be considerably more expensive. >> >> Is eta the problem, then? Or am I missing something else? >> >> Best, >> Guillaume >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda From mailinglists at robbertkrebbers.nl Fri Aug 30 09:48:35 2019 From: mailinglists at robbertkrebbers.nl (Robbert Krebbers) Date: Fri, 30 Aug 2019 09:48:35 +0200 Subject: [Agda] Call for scholarship applications: PLMW @ POPL 2020 Message-ID: <95ff9927-babe-5b69-865e-5fe60fc76242@robbertkrebbers.nl> CALL FOR SCHOLARSHIP APPLICATIONS (** DEADLINE: OCTOBER 7 **) ACM SIGPLAN Programming Languages Mentoring Workshop, New Orleans, Louisiana Tuesday, January 21, 2020 Co-located with POPL 2020 Web page: https://popl20.sigplan.org/home/PLMW-POPL-2020 After the success of the first eight Programming Languages Mentoring Workshops at POPL 2012-2019 we are announcing the 9th SIGPLAN Programming Languages Mentoring Workshop (PLMW), co-located with POPL 2020 and organized by Stephanie Balzer, Justin Hsu, Robbert Krebbers, and Nobuko Yoshida. The purpose of this mentoring workshop is to encourage graduate students and senior undergraduate students to pursue careers in programming language research. This workshop will bring together world leaders in programming languages research and teaching from academia and industry to provide (a) technical sessions on cutting-edge PL research and (b) mentoring sessions on how to prepare for a research career. The workshop will help students imagine how they might contribute to our research community. We especially encourage women and underrepresented minority students, and people with disabilities to attend PLMW. This workshop is part of the activities surrounding POPL, the Symposium on Principles of Programming Languages, and takes place the day before the main conference. One goal of the workshop is to make the POPL conference more accessible to newcomers. We hope that participants will stay through the entire conference. A number of sponsors (listed below) have generously donated scholarship funds for qualified students to attend PLMW. These scholarships should cover reasonable expenses (airfare, hotel, and registration fees) for attendance at both the workshop and the POPL conference. Students attending this year will get one year free student membership of SIGPLAN, unless they prefer to opt out during their application. The workshop registration is open to all. Students with alternative sources of funding are welcome as well. APPLICATION for PLMW scholarship: The scholarship application can be accessed at the following URL: https://forms.gle/dzV8ELgQUx2xfEjm9 The deadline for full consideration of funding is Monday, October 7. Selected participants will be notified by October 21. Confirmed speakers (so far): * Adriana Compagnoni, Stevens Institute of Technology * Isil Dillig, UT Austin * Derek Dreyer, MPI-SWS * Marco Gaboardi, SUNY Buffalo * Lindsey Kuper, UC Santa Cruz * Xavier Leroy, Inria Confirmed sponsors (so far): * An Anonymous Donor * NSF * ACM SIGPLAN * Amazon From guillaume.brunerie at gmail.com Fri Aug 30 14:34:27 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Fri, 30 Aug 2019 14:34:27 +0200 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: References: Message-ID: Did you try the following instead, to get the info Nils is asking for (i.e. without the "-2.6.0.1" suffix)? $ ghc-pkg describe Agda This is what is needed on my machine, at least. Best, Guillaume Den ons 28 aug. 2019 kl 21:45 skrev Martin Escardo : > > FYI, If one installs ghc-8.6.5 from ppa:hvr/ghc in Ubuntu 18.04, one > gets the same type checking time as in 16.04 after reinstalling Agda. Martin > > On 02/08/2019 20:17, Martin Escardo wrote: > > I accidentally discovered the following (because I booted in an old > > partition to try to find a file, and then kept working on that partition): > > > > A certain Agda file type checks in a core i5 Dell laptop 7th generation > > > > * In 70 seconds in Ubuntu 18.04 LTS > > * In 50 seconds in Ubuntu 16.04 LTS > > > > I couldn't believe this, and so I tested this in a core i5 HP laptop 6th > > generation. The results where, respectively, > > > > * 70+delta > > * 50+delta' > > > > with the deltas < 3sec. > > > > Of course we can try to blame the Intel bugs and their fixes for that. > > But, still, both 16.04 and 18.04 are long-term support versions and are > > supposed to incorporate the fixes. > > > > In the four 2x2 cases, Haskell 8.0.2 and Agda 2.6.0.1 are used. Also, in > > both cases nothing else is running in user space. > > > > Can anybody reproduce this? > > > > This is a significant difference: 50/70 is 70% of the time in 16.04. Way > > faster. > > > > Martin > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > > -- > Martin Escardo > http://www.cs.bham.ac.uk/~mhe > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From m.escardo at cs.bham.ac.uk Fri Aug 30 16:47:54 2019 From: m.escardo at cs.bham.ac.uk (Martin Escardo) Date: Fri, 30 Aug 2019 15:47:54 +0100 Subject: [Agda] Agda speed in Ubuntu In-Reply-To: References: Message-ID: <238e466d-fdcc-c532-a256-b08bd9b2cb04@cs.bham.ac.uk> I think the problem is that I copied the .cabal directory but not the .ghc directory from which this information is obtained by ghc-pkg . Martin On 30/08/2019 13:34, guillaume.brunerie at gmail.com wrote: > Did you try the following instead, to get the info Nils is asking for > (i.e. without the "-2.6.0.1" suffix)? > > $ ghc-pkg describe Agda > > This is what is needed on my machine, at least. > > Best, > Guillaume > > Den ons 28 aug. 2019 kl 21:45 skrev Martin Escardo : >> >> FYI, If one installs ghc-8.6.5 from ppa:hvr/ghc in Ubuntu 18.04, one >> gets the same type checking time as in 16.04 after reinstalling Agda. Martin >> >> On 02/08/2019 20:17, Martin Escardo wrote: >>> I accidentally discovered the following (because I booted in an old >>> partition to try to find a file, and then kept working on that partition): >>> >>> A certain Agda file type checks in a core i5 Dell laptop 7th generation >>> >>> * In 70 seconds in Ubuntu 18.04 LTS >>> * In 50 seconds in Ubuntu 16.04 LTS >>> >>> I couldn't believe this, and so I tested this in a core i5 HP laptop 6th >>> generation. The results where, respectively, >>> >>> * 70+delta >>> * 50+delta' >>> >>> with the deltas < 3sec. >>> >>> Of course we can try to blame the Intel bugs and their fixes for that. >>> But, still, both 16.04 and 18.04 are long-term support versions and are >>> supposed to incorporate the fixes. >>> >>> In the four 2x2 cases, Haskell 8.0.2 and Agda 2.6.0.1 are used. Also, in >>> both cases nothing else is running in user space. >>> >>> Can anybody reproduce this? >>> >>> This is a significant difference: 50/70 is 70% of the time in 16.04. Way >>> faster. >>> >>> Martin >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> >> -- >> Martin Escardo >> http://www.cs.bham.ac.uk/~mhe >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda -- Martin Escardo http://www.cs.bham.ac.uk/~mhe From tarmo at cs.ioc.ee Sat Aug 31 20:48:25 2019 From: tarmo at cs.ioc.ee (Tarmo Uustalu) Date: Sat, 31 Aug 2019 18:48:25 +0000 Subject: [Agda] ETAPS 2020 2nd joint call for papers Message-ID: <20190831184825.7714c4c1@cs.ioc.ee> ****************************************************************** JOINT CALL FOR PAPERS 23rd European Joint Conferences on Theory and Practice of Software ETAPS 2020 Dublin, Ireland, 25-30 April 2020 http://www.etaps.org/2020 ****************************************************************** -- ABOUT ETAPS -- ETAPS is the primary European forum for academic and industrial researchers working on topics relating to software science. ETAPS, established in 1998, is a confederation of four annual conferences, accompanied by satellite workshops. ETAPS 2020 is the twenty-third event in the series. -- MAIN CONFERENCES (27-30 April) -- * ESOP: European Symposium on Programming (PC chair: Peter M?ller, ETH Z?rich, Switzerland) * FASE: Fundamental Approaches to Software Engineering (PC chairs: Heike Wehrheim, Universit?t Paderborn, Germany, and Jordi Cabot, Universitat Oberta de Catalunya, Spain) * FoSSaCS: Foundations of Software Science and Computation Structures (PC chairs: Barbara K?nig, Univ Duisburg-Essen, Germany, and Jean Goubault-Larrecq, LSV, ENS Paris-Saclay, France) * TACAS: Tools and Algorithms for the Construction and Analysis of Systems (PC chairs: Armin Biere, Johannes-Kepler-Univ Linz, Austria, and David Parker, University of Birmingham, United Kingdom) TACAS '20 will host the 9th Competition on Software Verification (SV-COMP). POST, which was an ETAPS conference 2012-2019, has been discontinued. -- INVITED SPEAKERS -- * Unifying speakers: Lars Birkedal (Aarhus Universitet, Denmark) Jane Hillston (University of Edinburgh, United Kingdom) * ESOP invited speaker: Isil Dillig (University of Texas at Austin, USA) * FASE invited speaker: Willem Visser (Stellenbosch University, South Africa) -- IMPORTANT DATES * Papers due: 24 October 2019 23:59 AoE (=GMT-12) * Rebuttal (ESOP, FoSSaCS and, for selected papers, TACAS): 9 December 00:01 AoE - 10 December 23:59 AoE * Notification: 23 December 2019 * Camera-ready versions due: 22 February 2020 -- SUBMISSION INSTRUCTIONS -- The four main conferences of ETAPS 2020 solicit contributions of the following types: * ESOP: regular research papers of max 25 pp (excl bibl) * FASE: regular research papers and empirical evaluation papers of max 18 pp (excl bibl), tool demonstration papers of 6+6 pp * FoSSaCS: regular research papers of max 18 pp (excl bibl) * TACAS: regular research papers, case study papers and regular tool papers of max 16 pp (excl bibl), tool demonstration papers of 6 pp For definitions of the different paper types and specific instructions, where they are present, see the webpages of the individual conferences. All accepted papers will appear in the conference proceedings and have presentations during the conference. A condition of submission is that, if the submission is accepted, one of the authors attends the conference to give the presentation. Submitted papers must be in English presenting original research. They must be unpublished and not submitted for publication elsewhere. In particular, simultaneous submission of the same contribution to multiple ETAPS conferences is forbidden. Submissions must follow the formatting guidelines of Springer's LNCS and be submitted electronically in pdf through the Easychair author interface of the respective conference. Submissions not adhering to the specified format and length may be rejected immediately. FASE will use double-blind reviewing. Authors are asked to omit their names and institutions; refer to own prior work in the third person; not to include acknowledgements that might identify them. Regular tool paper and tool demonstration paper submissions to TACAS must be accompanied by an artifact. The artifact will be evaluated and the outcome will be taken into account in the acceptance decision of the paper. ESOP and FoSSaCS will use an author rebuttal phase. TACAS will have rebuttal for selected papers. -- PUBLICATION The proceedings will be published in the Advanced Research in Computing and Software Science (ARCoSS) subline of Springer's LNCS series. The proceedings volumes will appear in gold open access, so the published versions of all papers will be available for everyone to download from the publisher's website freely, from the date of online publication, perpetually. The copyright of the papers will remain with the authors. -- SATELLITE EVENTS (25-26 April) -- A number of satellite workshops will take place before the main conferences. * 25-26 April (two days): CMCS, GALOP, SynCoP, VerifyThis, VPT, WADT, WRLA * 25 April: CREST, InterAVT, MSFP, TEASE-LP * 26 April: HCVS, MARS, MeTRiD, PLACES, RW -- CITY AND HOST INSTITUTION -- Dublin (Baile ?tha Cliath) is the capital and largest city of the Republic of Ireland. It is situated on the East coast of Ireland, at the mouth of the River Liffey, at the centre of the Greater Dublin area with 1.9 million inhabitants. Dublin is a historical and contemporary centre for education, the arts, administration and industry. As of 2018 the city was listed by the Globalization and World Cities Research Network (GaWC) as a global city, with a ranking of Alpha-, which places it among the top thirty cities in the world. ETAPS 2020 is organised by the University of Limerick in cooperation with Lero, the Irish Software Research Centre spanning 9 universities and ITs in Ireland. -- ORGANIZERS -- General chair: Tiziana Margaria (University of Limerick and Lero, Ireland) Workshop chairs: Falk Howar (Technische Universit?t Dortmund, Germany) and Peter H?fner (Data61, Australia) Practical organization: Easy Conferences -- FURTHER INFORMATION -- Please do not hesitate to contact the general chair at . From palmgren at math.su.se Sun Sep 1 16:44:20 2019 From: palmgren at math.su.se (Erik Palmgren) Date: Sun, 1 Sep 2019 14:44:20 +0000 Subject: [Agda] How does unification work? In-Reply-To: References: Message-ID: To second Guillaume I even have quite short example of identical terms that takes a long term to unify. In my development (set theoretic model of type theory) the following goal is encountered Goal: apt (B [[ ? A (? A) ]]) ((x , y) , y) ? piV-ext00 (mk-Par-sub A B (? A) (x , y)) (pj1 (pj1 (apel (elt-subst (? A) p) (x , y)))) y ? apt (B [[ ? A (? A) ]]) ((x , y) , y) ? piV-ext00 (mk-Par-sub A B (? A) (x , y)) (pj1 (pj1 (apel (elt-subst (? A) p) (x , y)))) y But a proof by the relevant reflexivity takes many minutes ?. My new colleague Anders M?rtberg mentioned that in cubicaltt there is a check for identical terms that can speed up unifications. Could it possible to implement his trick in standard Agda? Best regards Erik > 29 aug. 2019 kl. 15:58 skrev Guillaume Brunerie : > > Thanks Ulf, that may explain the difference between checking equality > and normalizing both sides, but does it explain the difference in > behavior between Agda 2.5.3 and Agda 2.5.4? (the latter uses a very > large amount of memory and the former does not) > While trying to isolate the issue, I obtained a test file which works > fine in Agda 2.5.4 but uses a lot of memory in Agda 2.6.0 (so not the > same issue, but a very similar one). I reported it here: > https://github.com/agda/agda/issues/4044 > > Best, > Guillaume > > > Den ons 28 aug. 2019 kl 14:44 skrev Ulf Norell : >> >> A difference is that when normalizing you stay in the abstract machine until you reach a normal form, but when >> checking equality, each whnf step runs in a separate instance of the machine. This means that you lose sharing >> between steps, which could explain the behaviour you're seeing. >> >> / Ulf >> >> On Wed, Aug 28, 2019 at 2:30 PM Guillaume Brunerie wrote: >>> >>> Hi all, >>> >>> I have a (rather big) example of two terms u and v which each take about 20 seconds and not much memory to fully normalize (the results is about 30 000 lines long), but checking whether reflexivity has type u == v exhaust all of the memory of my computer (25G). With Agda 2.5.3, the same example does not take much memory at all, but takes several minutes, much longer than simply computing both normal forms. The high memory usage is already present in Agda 2.5.4.1. >>> >>> I?m trying to shrink the example but I?m wondering if it?s expected that checking whether two terms are definitionally equal can take much longer and/or much more memory than normalizing them and comparing the normal forms. >>> >>> My naive understanding of the algorithm for checking definitional equality is as follows (at least for types without eta): >>> - check whether the two terms are syntactically equal (unless using the option --no-syntactic-equality), return True if they are >>> - reduce both terms to weak-head normal form, if the heads differ then return False, otherwise recursively check definitional equality of the arguments pairwise. >>> >>> Is this more or less correct? If we do not have eta, then it seems to me that in the worst case scenario, checking definitional equality is more or less as expensive as normalizing both sides, but it shouldn?t be considerably more expensive. >>> >>> Is eta the problem, then? Or am I missing something else? >>> >>> Best, >>> Guillaume >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From casperbp at gmail.com Sun Sep 1 23:13:03 2019 From: casperbp at gmail.com (Casper Bach Poulsen) Date: Sun, 1 Sep 2019 23:13:03 +0200 Subject: [Agda] PEPM 2020 Call for Papers Message-ID: -- CALL FOR PAPERS -- ACM SIGPLAN Workshop on PARTIAL EVALUATION AND PROGRAM MANIPULATION (PEPM) 2020 =============================================================================== * Website : https://popl20.sigplan.org/home/pepm-2020 * Time : 20th - 21st January 2020 * Place : New Orleans, Louisiana, United States (co-located with POPL 2020) The ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM), which has a history going back to 1991 and has co-located with POPL every year since 2006, originates in the discoveries of practically useful automated techniques for evaluating programs with only partial input. Over the years, the scope of PEPM has expanded to include a variety of research areas centred around the theme of semantics-based program manipulation ? the systematic exploitation of treating programs not only as subject to black-box execution, but also as data structures that can be generated, analysed, and transformed while establishing or maintaining important semantic properties. Scope ----- In addition to the traditional PEPM topics (see below), PEPM 2020 welcomes submissions in new domains, in particular: * Semantics based and machine-learning based program synthesis and program optimisation. * Modelling, analysis, and transformation techniques for distributed and concurrent protocols and programs, such as session types, linear types, and contract specifications. More generally, topics of interest for PEPM 2020 include, but are not limited to: * Program and model manipulation techniques such as: supercompilation, partial evaluation, fusion, on-the-fly program adaptation, active libraries, program inversion, slicing, symbolic execution, refactoring, decompilation, and obfuscation. * Techniques that treat programs/models as data objects including metaprogramming, generative programming, embedded domain-specific languages, program synthesis by sketching and inductive programming, staged computation, and model-driven program generation and transformation. * Program analysis techniques that are used to drive program/model manipulation such as: abstract interpretation, termination checking, binding-time analysis, constraint solving, type systems, automated testing and test case generation. * Application of the above techniques including case studies of program manipulation in real-world (industrial, open-source) projects and software development processes, descriptions of robust tools capable of effectively handling realistic applications, benchmarking. Examples of application domains include legacy program understanding and transformation, DSL implementations, visual languages and end-user programming, scientific computing, middleware frameworks and infrastructure needed for distributed and web-based applications, embedded and resource-limited computation, and security. This list of categories is not exhaustive, and we encourage submissions describing new theories and applications related to semantics-based program manipulation in general. If you have a question as to whether a potential submission is within the scope of the workshop, please contact the programme co-chairs, Casper Bach Poulsen (http://casperbp.net) and Zhenjiang Hu (http://sei.pku.edu.cn/~hu/). Submission categories and guidelines ------------------------------------ Two kinds of submissions will be accepted: Regular Research Papers and Short Papers. * Regular Research Papers should describe new results, and will be judged on originality, correctness, significance, and clarity. Regular research papers must not exceed 12 pages (excluding bibliography). * Short Papers may include tool demonstrations and presentations of exciting if not fully polished research, and of interesting academic, industrial, and open-source applications that are new or unfamiliar. Short papers must not exceed 6 pages (excluding bibliography). Both kinds of submissions should be typeset using the two-column ?sigplan? sub-format of the new ?acmart? format available at: http://sigplan.org/Resources/Author/ and submitted electronically via HotCRP: https://pepm20.hotcrp.com/ PEPM 2020 will employ lightweight double-blind reviewing according to the rules of POPL 2020. Quoting from POPL 2020?s call for papers: ?submitted papers must adhere to two rules: 1. author names and institutions must be omitted, and 2. references to authors? own related work should be in the third person (e.g., not ?We build on our previous work ...? but rather ?We build on the work of ...?). The purpose of this process is to help the PC and external reviewers come to an initial judgment about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult. In particular, important background references should not be omitted or anonymized. In addition, authors are free to disseminate their ideas or draft versions of their paper as usual. For example, authors may post drafts of their papers on the web or give talks on their research ideas.? See POPL 2020?s Submission and Reviewing FAQ page for more information: https://popl20.sigplan.org/track/POPL-2020-Research-Papers#Submission-and-Reviewing-FAQ Submissions are welcome from PC members (except the two co-chairs). Accepted papers will appear in formal proceedings published by ACM, and be included in the ACM Digital Library. Authors of short papers, however, can ask for their papers to be left out of the formal proceedings. At least one author of each accepted contribution must attend the workshop and present the work. In the case of tool demonstration papers, a live demonstration of the described tool is expected. Suggested topics, evaluation criteria, and writing guidelines for both research tool demonstration papers will be made available on the PEPM 2020 web site: https://popl20.sigplan.org/home/pepm-2020 Student participants with accepted papers can apply for a SIGPLAN PAC grant to help cover travel expenses and other support. PAC also offers other support, such as for child-care expenses during the meeting or for travel costs for companions of SIGPLAN members with physical disabilities, as well as for travel from locations outside of North America and Europe. For details on the PAC programme, see its web page: https://www.sigplan.org/PAC/ Important dates --------------- * Paper submission deadline : Friday 18th October 2019 (AoE) * Author notification : Monday 11th November 2019 (AoE) * Workshop : Monday 20th and Tuesday 21st January 2020 The proceedings are expected to be published 2 weeks pre-conference. AUTHORS TAKE NOTE: The official publication date is the date the proceedings are made available in the ACM Digital Library. This date may be up to two weeks prior to the first day of your conference. The official publication date affects the deadline for any patent filings related to published work. (For those rare conferences whose proceedings are published in the ACM Digital Library after the conference is over, the official publication date remains the first day of the conference.) Best paper award ---------------- PEPM 2020 continues the tradition of a Best Paper award. The winner will be announced at the workshop. Programme committee ------------------- * Andreas Abel (Chalmers U.) * Guillaume Allais (U. Strathclyde) * Nada Amin (Cambridge U.) * Casper Bach Poulsen (co-chair) (TU Delft) * Patrick Bahr (Copenhagen U.) * Aggelos Biboudis (EPFL) * Olivier Danvy (National U. Singapore) * ?lvaro Garc?a-P?rez (IMDEA) * Jeremy Gibbons (Oxford U.) * Robert Gl?ck (Copenhagen U.) * Torsten Grust (U. Tubingen) * Zhenjiang Hu (co-chair) (Peking U./NII) * Hideya Iwasaki (U. Electro-Communications) * Oleg Kiselyov (Tohoku U.) * Hedehiko Masuhara (Tokyo I. Technology) * Keisuke Nakano (Tohoku U.) * Bruno Oliveira (U. Hong Kong) * Jens Palsberg (UCLA) * Jo?o Saraiva (Minho U.) * Tom Schrijvers (KU Leuven) * Eijiro Sumii (Tohoku U.) * Walid Taha (Halmstad U.) * Nobuko Yoshida (Imperial C. London) -------------- next part -------------- An HTML attachment was scrubbed... URL: From plescann at ens-lyon.fr Mon Sep 2 09:45:05 2019 From: plescann at ens-lyon.fr (Pierre Lescanne) Date: Mon, 2 Sep 2019 09:45:05 +0200 Subject: [Agda] cabal cannot install Agda 2.6.0 Message-ID: I failed also to install Agda 2.6.0 using cabal because a file necessary in the installation is missing, namely /alex/. Here is the message that I got: /setup: The program 'alex' version >=3.1.0 && <3.2.0 || ==3.2.1 || >=3.2.3 is/ ///required but it could not be found./ ///cabal: Leaving directory '/tmp/cabal-tmp-15469/Agda-2.6.0.1'/ ///cabal: Error: some packages failed to install:/ ///Agda-2.6.0.1 failed during the configure step. The exception was:/ ///ExitFailure 1/ -- Cheers --------------------------- Pierre Lescanne (Professeur ?m?rite) LIP / ENS de Lyon 46 all?e d'Italie 69364 LYON Cedex 07, France t?l: +33 6 85 70 94 31 http://perso.ens-lyon.fr/pierre.lescanne/ --------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From plescann at ens-lyon.fr Mon Sep 2 10:25:19 2019 From: plescann at ens-lyon.fr (Pierre Lescanne) Date: Mon, 2 Sep 2019 10:25:19 +0200 Subject: [Agda] cabal cannot install Agda 2.6.0 In-Reply-To: References: Message-ID: <8dd0b31b-1015-9bbe-f72a-17050ef9fa5a@ens-lyon.fr> Installing program alex and then program happy, it? works. Le 02/09/2019 ? 09:45, Pierre Lescanne a ?crit?: > > I failed also to install Agda 2.6.0 using cabal because a file > necessary in the installation is missing, namely /alex/. Here is the > message that I got: > > /setup: The program 'alex' version >=3.1.0 && <3.2.0 || ==3.2.1 || > >=3.2.3 is/ > ///required but it could not be found./ > ///cabal: Leaving directory '/tmp/cabal-tmp-15469/Agda-2.6.0.1'/ > ///cabal: Error: some packages failed to install:/ > ///Agda-2.6.0.1 failed during the configure step. The exception was:/ > ///ExitFailure 1/ > > -- > Cheers > > > --------------------------- > Pierre Lescanne (Professeur ?m?rite) > LIP / ENS de Lyon > 46 all?e d'Italie > 69364 LYON Cedex 07, France > t?l: +33 6 85 70 94 31 > http://perso.ens-lyon.fr/pierre.lescanne/ > --------------------------- -- Cordialement --------------------------- Pierre Lescanne (Professeur ?m?rite) LIP / ENS de Lyon 46 all?e d'Italie 69364 LYON Cedex 07, France t?l: +33 6 85 70 94 31 http://perso.ens-lyon.fr/pierre.lescanne/ --------------------------- -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Mon Sep 2 11:12:00 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 2 Sep 2019 11:12:00 +0200 Subject: [Agda] How does unification work? In-Reply-To: References: Message-ID: On 01/09/2019 16.44, Erik Palmgren wrote: > My new colleague Anders M?rtberg mentioned that in cubicaltt there is > a check for identical terms that can speed up unifications. > > Could it possible to implement his trick in standard Agda? This trick is implemented in Agda (you can turn it off using --no-syntactic-equality). In this case I suppose that the problem is that one or more implicit arguments are not syntactically equal. -- /NAD From palmgren at math.su.se Mon Sep 2 12:57:16 2019 From: palmgren at math.su.se (Erik Palmgren) Date: Mon, 2 Sep 2019 12:57:16 +0200 Subject: [Agda] How does unification work? In-Reply-To: References: Message-ID: Den 2019-09-02 kl. 11:12, skrev Nils Anders Danielsson: > On 01/09/2019 16.44, Erik Palmgren wrote: >> My new colleague Anders M?rtberg mentioned that in cubicaltt there is >> a check for identical terms that can speed up unifications. >> >> Could it possible to implement his trick in standard Agda? > > This trick is implemented in Agda (you can turn it off using > --no-syntactic-equality). In this case I suppose that the problem is > that one or more implicit arguments are not syntactically equal. > Thanks. I will look for hidden arguments. Erik From chisvasileandrei at gmail.com Mon Sep 2 13:54:59 2019 From: chisvasileandrei at gmail.com (Andrei Chis) Date: Mon, 2 Sep 2019 13:54:59 +0200 Subject: [Agda] SLE 2019: Call for Endorsements - Most Influential Paper (MIP) Award Message-ID: ------------------------------------------------------------------------ Call for Endorsements: ACM SIGPLAN International Conference on Software Language Engineering (SLE) - Most Influential Paper Award SLE MIP Awards: http://www.sleconf.org/mip Follow us on twitter: https://twitter.com/sleconf SLE 2019: https://conf.researchr.org/home/sle-2019 ------------------------------------------------------------------------ Starting in 2019, the ACM SIGPLAN International Conference on Software Language Engineering (SLE) delivers annually an award to the Most Influential Paper (MIP) presented at the SLE conference held 10 years prior to the award year. The SLE MIP Award distinguishes the authors of the paper having the greatest impact (either scientific, societal or industrial). The papers are judged by their influence over the past decade. The SLE MIP Award is delivered by the current members of the Steering Committee (SC) of the conference, considering: i) endorsements from the community, and ii) the synthesis of some facts and metrics collected in advance by selected SC members. The vote is by majority of the SC members, after a discussion during the online meetings. Authors are informed at once, and awarded at the coming conference. In 2019 we offer two awards: one for the authors of the MIP from the 2009 program (http://www.sleconf.org/2009/Program.html), and another one for the authors of the MIP from the 2008 program ( http://www.sleconf.org/2008/program.html), back to the first edition of the conference. SLE MIP Award 2019: - Program SLE 2009: http://www.sleconf.org/2009/Program.html; - Endorsement: http://tiny.cc/slemip2019 (deadline: Sep. 20th, 2019) SLE MIP Award 2018: - Program SLE 2008: http://www.sleconf.org/2008/program.html; - Endorsement: http://tiny.cc/slemip2018 (deadline: Sep. 20th, 2019) -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.brunerie at gmail.com Mon Sep 2 16:32:22 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Mon, 2 Sep 2019 16:32:22 +0200 Subject: [Agda] How does unification work? In-Reply-To: References: Message-ID: I still haven?t managed to get a minimal test case for this, but I did an agda-bisect between 2.5.3 and 2.5.4.1 and it suggests that the first bad commit is a02895d (The Agda Abstract Machine - Complete rewrite of fast reduce to use a proper call-by-need abstract machine. Runs in the ST monad with STRefs for heap pointers.) Best, Guillaume Den ons 28 aug. 2019 kl 14:44 skrev Ulf Norell : > > A difference is that when normalizing you stay in the abstract machine until you reach a normal form, but when > checking equality, each whnf step runs in a separate instance of the machine. This means that you lose sharing > between steps, which could explain the behaviour you're seeing. > > / Ulf > > On Wed, Aug 28, 2019 at 2:30 PM Guillaume Brunerie wrote: >> >> Hi all, >> >> I have a (rather big) example of two terms u and v which each take about 20 seconds and not much memory to fully normalize (the results is about 30 000 lines long), but checking whether reflexivity has type u == v exhaust all of the memory of my computer (25G). With Agda 2.5.3, the same example does not take much memory at all, but takes several minutes, much longer than simply computing both normal forms. The high memory usage is already present in Agda 2.5.4.1. >> >> I?m trying to shrink the example but I?m wondering if it?s expected that checking whether two terms are definitionally equal can take much longer and/or much more memory than normalizing them and comparing the normal forms. >> >> My naive understanding of the algorithm for checking definitional equality is as follows (at least for types without eta): >> - check whether the two terms are syntactically equal (unless using the option --no-syntactic-equality), return True if they are >> - reduce both terms to weak-head normal form, if the heads differ then return False, otherwise recursively check definitional equality of the arguments pairwise. >> >> Is this more or less correct? If we do not have eta, then it seems to me that in the worst case scenario, checking definitional equality is more or less as expensive as normalizing both sides, but it shouldn?t be considerably more expensive. >> >> Is eta the problem, then? Or am I missing something else? >> >> Best, >> Guillaume >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda From martin.stone.davis at gmail.com Wed Sep 4 04:17:57 2019 From: martin.stone.davis at gmail.com (Martin Stone Davis) Date: Tue, 3 Sep 2019 19:17:57 -0700 Subject: [Agda] agda ghc backend executable (re)location Message-ID: I would like to `agda --compile` but have agda use an alternatively-installed ghc. On my machine, agda is using `/usr/bin/ghc` but I would like it to use a different executable. I have tried (1) creating a bash alias and (2) creating a bash script named `ghc`. In both tries, when I run `ghc` from the command line, it invokes my preferred executable, but agda still uses the one in `/usr/bin`. Is there a way to convince agda to use an alternate? By way of background, I am running Arch Linux and I have had ghc-related problems when trying to install the `master` version of agda. I resolved this by using `stack` to install agda. The current issue is that, when I tried to `agda --compile hello-world.agda`, I received errors with the ieee package that I could not easily resolve. My plan is to use stack to install ghc, and thus I need agda to refer to this alternative ghc executable. From aggelos.biboudis at epfl.ch Wed Sep 4 14:18:37 2019 From: aggelos.biboudis at epfl.ch (Aggelos Biboudis) Date: Wed, 4 Sep 2019 14:18:37 +0200 Subject: [Agda] SPLASH 2019 Call for Participation Message-ID: ACM Conference on Systems, Programming, Languages, and Applications: Software for Humanity (SPLASH'19) Athens, Greece Sun 20 - Fri 25 October 2019 2019.splashcon.org twitter.com/splashcon www.facebook.com/SPLASHCon Sponsored by ACM SIGPLAN SPLASH is the ACM SIGPLAN conference on Systems, Programming, Languages, and Applications: Software for Humanity. SPLASH embraces all aspects of software construction and delivery, to make it the premier conference on the applications of programming languages--at the intersection of programming languages and software engineering. SPLASH 2019 will take place in Athens from Sunday 20th to Friday 25th of October 2019. SPLASH includes the following co-located conferences: OOPSLA, Onward!, GPCE, SLE, DLS (note changed date), and MPLR; as well as a large array of workshops and events. The Rebase track (formerly ?SPLASH-I?) aims to deliver presentations of interest to software practitioners and researchers alike. Rebase will feature perspectives from industry giants, to rocketship startups, to academic research, and solutions from algorithms to physical computing, to quantum computing. Registration ------------ ** Friday, 20th September 2019 (Early Deadline) ** <-- very soon! * Contact: info at splashcon.org * Register: https://2019.splashcon.org/attending/Registration * Venue: https://2019.splashcon.org/venue/splash-2019-venue Conference ---------- OOPSLA 2019 https://2019.splashcon.org/track/splash-2019-oopsla Onward! Papers https://2019.splashcon.org/track/splash-2019-Onward-papers Onward! Essays https://2019.splashcon.org/track/splash-2019-Onward-essays Rebase https://2019.splashcon.org/track/splash-2019-rebase Dynamic Languages Symposium (DLS) *Note*: DLS?19 will be on Sunday instead of its usual slot https://conf.researchr.org/home/dls-2019 Generative Programming: Concepts & Experiences (GPCE) https://conf.researchr.org/home/gpce-2019 Software Language Engineering (SLE) https://conf.researchr.org/home/sle-2019 Managed Programming Languages and Runtimes (MPLR) https://conf.researchr.org/home/mplr-2019 SPLASH-E https://2019.splashcon.org/track/splash-2019-SPLASH-E Doctoral Symposium http://2019.splashcon.org/track/splash-2019-Doctoral-Symposium Student Research Competition https://2019.splashcon.org/track/splash-2019-SRC Workshops --------- AGERE (Actors, Agents, and Decentralized Control) https://2019.splashcon.org/home/agere-2019 AI-SEPS (AI-Inspired and Empirical Methods for SE on Parallel Computing Systems) https://2019.splashcon.org/home/seps-2019 DSM (Domain-Specific Modeling) https://2019.splashcon.org/home/dsm-2019 IC (Incremental Computing) https://2019.splashcon.org/home/ic-2019 LIVE (Live Programming) https://2019.splashcon.org/home/live-2019 META (Metaprogramming) https://2019.splashcon.org/home/meta-2019 NJR (Normalized Java Resource) https://2019.splashcon.org/home/njr-2019 REBLS (Reactive and Event-based Languages and Systems) https://2019.splashcon.org/home/rebls-2019 STOKED (Spatio-Temporal platforms for Observations and Knowledge of Earth Data) https://2019.splashcon.org/home/stoked-2019 VMIL (Virtual Machines and Intermediate Languages) https://2019.splashcon.org/home/vmil-2019 Looking forward to seeing you in Athens! From nad at cse.gu.se Wed Sep 4 16:25:26 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 4 Sep 2019 16:25:26 +0200 Subject: [Agda] agda ghc backend executable (re)location In-Reply-To: References: Message-ID: <69390c92-3e8b-ecbe-1443-d41c6ab20847@cse.gu.se> On 04/09/2019 04.17, Martin Stone Davis wrote: > I would like to `agda --compile` but have agda use an > alternatively-installed ghc. If you install a recent development version, then I think you can use "--with-compiler=?". -- /NAD From Dominique.Devriese at vub.be Fri Sep 6 09:32:24 2019 From: Dominique.Devriese at vub.be (Dominique DEVRIESE) Date: Fri, 6 Sep 2019 07:32:24 +0000 Subject: [Agda] CFP for Certified Programs and Proofs (CPP 2020) Message-ID: ## CFP for Certified Programs and Proofs (CPP 2020) ## Certified Programs and Proofs (CPP) is an international conference on practical and theoretical topics in all areas that consider certification as an essential paradigm for their work. Certification here means formal, mechanized verification of some sort, preferably with the production of independently checkable certificates. CPP spans areas of computer science, mathematics, logic, and education. CPP 2020 will be held on 20-21 January 2020 in New Orleans, Louisiana, United States and will be co-located with POPL 2020. CPP 2020 is sponsored by ACM SIGPLAN, in cooperation with ACM SIGLOG. For more information about this edition and the CPP series please visit: https://popl20.sigplan.org/home/CPP-2020 ### News - Submission guideline news: **lightweight double-blind reviewing process** and **unrestricted appendices** that don't count against the page limit - Delighted to announce that the **invited speakers** for CPP 2020 will be: Adam Chlipala (MIT CSAIL) and Grigore Rosu (UIUC and Runtime Verification) - CPP 2020 will also host the **POPLmark 15 Year Retrospective Panel** ### Important Dates - Abstract Deadline: 16 October 2019 at 23:59 AoE (UTC-12h) - Paper Submission Deadline: 21 October 2019 at 23:59 AoE (UTC-12h) - Notification: 27 November 2019 - Camera Ready Deadline: 20 December 2019 - Conference: 20 - 21 January 2020 Deadlines expire at the end of the day, anywhere on earth. Abstract and submission deadlines are tight and there will be **no extensions**. ### Topics of Interest We welcome submissions in research areas related to formal certification of programs and proofs. The following is a non-exhaustive list of topics of interests to CPP: - certified or certifying programming, compilation, linking, OS kernels, runtime systems, and security monitors; - certified mathematical libraries and mathematical theorems; - proof assistants (e.g, ACL2, Agda, Coq, Dafny, F*, HOL, HOL-Light, Idris, Isabelle, Lean, Mizar, Nuprl, PVS, etc) - new languages and tools for certified programming; - program analysis, program verification, and program synthesis; - program logics, type systems, and semantics for certified code; - logics for certifying concurrent and distributed systems; - mechanized metatheory, formalized programming language semantics, and logical frameworks; - higher-order logics, dependent type theory, proof theory, logical systems, separation logics, and logics for security; - verification of correctness and security properties; - formally verified blockchains and smart contracts; - certificates for decision procedures, including linear algebra, polynomial systems, SAT, SMT, and unification in algebras of interest; - certificates for semi-decision procedures, including equality, first-order logic, and higher-order unification; - certificates for program termination; - formal models of computation; - mechanized (un)decidability and computational complexity proofs; - user interfaces for proof assistants and theorem provers; - original formal proofs of known results in math or computer science; - teaching mathematics and computer science with proof assistants. ### Program Committee Members - Jasmin Christian Blanchette (VU Amsterdam, Netherlands -- co-chair) - Catalin Hritcu (Inria Paris, France -- co-chair) - Nada Amin (Harvard University - USA) - Jes?s Mar?a Aransay Azofra (Universidad de La Rioja - Spain) - Mauricio Ayala-Rincon (Universidade de Brasilia - Brazil) - Liron Cohen (Cornell University - USA) - Dominique Devriese (Vrije Universiteit Brussel - Belgium) - Jean-Christophe Filli?tre (CNRS - France) - Adam Grabowski (University of Bialystok - Poland) - Warren Hunt (University of Texas - USA) - Ori Lahav (Tel Aviv University - Israel) - Peter Lammich (The University of Manchester - UK) - Dominique Larchey-Wendling (Univ. de Lorraine, CNRS, LORIA - France) - Hongjin Liang (Nanjing University - China) - Assia Mahboubi (Inria and VU Amsterdam - France) - Cesar Munoz (NASA - USA) - Vivek Nigam (fortiss GmbH - Germany) - Benjamin Pierce (University of Pennsylvania - USA) - Vincent Rahli (University of Luxembourg, SnT - Luxembourg) - Christine Rizkallah (UNSW Sydney - Australia) - Ilya Sergey (Yale-NUS College and National University of Singapore) - Kathrin Stark (Saarland University - Germany) - Nikhil Swamy (Microsoft Research - USA) - Nicolas Tabareau (Inria - France) - Dmitriy Traytel (ETH Z?rich - Switzerland) - Floris van Doorn (University of Pittsburgh - USA) - Akihisa Yamada (National Institute of Informatics - Japan) - Roberto Zunino (University of Trento - Italy) ### Submission Guidelines Prior to the paper submission deadline, the authors should upload their **anonymized** paper in PDF format through the HotCRP system at https://cpp2020.hotcrp.com Submissions must be written in English and provide sufficient detail to allow the program committee to assess the merits of the paper. Submitted papers must be formatted following the [ACM SIGPLAN Proceedings](http://www.sigplan.org/Resources/Author/) format using the `acmart` style with the `sigplan` option, which provides a two-column style, using 10 point font for the main text, and a header for double blind review submission, i.e., ``` \documentclass[sigplan,10pt,review]{acmart}\settopmatter{printfolios=true,printccs=false,printacmref=false} ``` Submitted papers should not exceed 12 pages, including tables and figures, but **excluding bibliography and clearly marked appendices**. The paper should be self contained without the appendices. Shorter papers are welcome and will be given equal consideration. Papers not conforming to the requirements concerning format and maximum length may be rejected without further consideration. CPP 2020 will employ a **lightweight double-blind reviewing process**. To facilitate this, submitted papers must adhere to two rules: 1. author names and institutions must be omitted, and 2. references to authors' own related work should be in the third person (e.g., not "We build on our previous work ?" but rather ?We build on the work of ?"). The purpose of this process is to help the PC and external reviewers come to an initial judgment about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult. In particular, important background references should not be omitted or anonymized. In addition, authors are free to disseminate their ideas or draft versions of their paper as usual. For example, authors may post drafts of their papers on the web or give talks on their research ideas. POPL has answers for frequently asked questions addressing many common concerns: https://popl20.sigplan.org/track/POPL-2020-Research-Papers#Submission-and-Reviewing-FAQ We encourage authors to provide any supplementary material that is required to support the claims made in the paper, such as proof scripts or experimental data. These materials must be uploaded at submission time, as an archive, not via a URL. Two forms of supplementary material may be submitted: - Anonymous supplementary material is available to the reviewers before they submit their first-draft reviews. - Non-anonymous supplementary material is available to the reviewers after they have submitted their first-draft reviews and learned the identity of the authors. Use the anonymous form whenever possible, so that the materials can be taken into account from the beginning of the reviewing process. Submitted papers must adhere to the SIGPLAN Republication Policy and the ACM Policy on Plagiarism. Concurrent submissions to other conferences, journals, workshops with proceedings, or similar forums of publication are not allowed. The PC chairs should be informed of closely related work submitted to a conference or journal in advance of submission. One author of each accepted paper is expected to present it at the conference. ### Publication, copyright, and open access The CPP proceedings will be published by the ACM, and authors of accepted papers will be required to choose one of the following publication options: 1. Author retains copyright of the work and grants ACM **a non-exclusive permission-to-publish license** and, optionally, licenses the work under a Creative Commons license; 2. Author retains copyright of the work and grants ACM **an exclusive permission-to-publish license**; 3. Author **transfers copyright** of the work to ACM. For authors who can afford it, we recommend option 1, which will make the paper **Gold Open Access**, and also encourage such authors to license their work under the CC-BY license. ACM will charge you an article processing fee for this option (currently, US$700), which you have to pay directly with the ACM. For everyone else, we recommend option 2, which is free and allows you to achieve **Green Open Access**, by uploading a pre-print of your paper to a repository that guarantees permanent archival such as arXiv or HAL. This is anyway a good idea for **timely dissemination** even if you chose option 1. Ensuring timely dissemination is particularly important for this edition, since, because of the very tight schedule, the official proceedings might not be available in time for CPP. The official CPP 2020 proceedings will also be available via SIGPLAN OpenTOC. For ACM's take on this, see their Copyright Policy and Author Rights. ### Contact For any questions please contact the two PC chairs: Catalin Hritcu >, Jasmin Christian Blanchette > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Sat Sep 7 19:47:38 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sat, 07 Sep 2019 20:47:38 +0300 Subject: [Agda] $ in eq-reasoning Message-ID: <4c55978f6d1e62d00d867ec753871527@scico.botik.ru> Who knows, please, why ``$`` is not type-checked when inserted into terms in the left column of the equality reasoning chain? For example, ``` begin f $ g x ?? proof ? x ? ``` Probably this concerns the relation between the precedence of ``$`` and the precedence of the reasoning combinators. Thanks, ------ Sergei From mechvel at scico.botik.ru Sat Sep 7 19:58:48 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sat, 07 Sep 2019 20:58:48 +0300 Subject: [Agda] $ in eq-reasoning In-Reply-To: <4c55978f6d1e62d00d867ec753871527@scico.botik.ru> References: <4c55978f6d1e62d00d867ec753871527@scico.botik.ru> Message-ID: <4e1f9b475a0d405ae122b8be5a67ea77@scico.botik.ru> On 2019-09-07 20:47, mechvel at scico.botik.ru wrote: > Who knows, please, > why ``$`` is not type-checked when inserted into terms in the left > column of the equality reasoning chain? > For example, > ``` > begin > f $ g x ?? proof ? > x > ? > ``` > Probably this concerns the relation between the precedence of ``$`` > and the precedence of the reasoning combinators. More precisely it is expressed as "... when inserted at the _top_ of a term in the left column ...". And as ``$`` is accepted at the lower levels, the subject becomes not so important. Please, withdraw it. -- SM From life.130815 at gmail.com Sun Sep 8 02:32:31 2019 From: life.130815 at gmail.com (mo jia) Date: Sun, 8 Sep 2019 08:32:31 +0800 Subject: [Agda] It is hard to understand the agda error message Message-ID: Hi: I am following the https://plfa.github.io/ In this exercise. <-trans'' : ? {m n p : ?} ? m < n ? n < p ----- ? m < p <-trans'' m -------------- next part -------------- A non-text attachment was scrubbed... Name: agda_error.png Type: image/png Size: 28603 bytes Desc: not available URL: From james.wood.100 at strath.ac.uk Sun Sep 8 19:48:10 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Sun, 8 Sep 2019 17:48:10 +0000 Subject: [Agda] It is hard to understand the agda error message In-Reply-To: References: Message-ID: Welcome to the mailing list! My tactic, to a first approximation, when proving in Agda, is to avoid error messages, and not really read them when they come up. This seems to be the intended way of working. In this case, the solution avoiding errors would be to get to the point -?-iff-< (?-trans ? (-?-iff'-< n https://lists.chalmers.se/mailman/listinfo/agda ? -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: agda_error.png Type: image/png Size: 28603 bytes Desc: agda_error.png URL: From life.130815 at gmail.com Thu Sep 12 12:08:12 2019 From: life.130815 at gmail.com (mo jia) Date: Thu, 12 Sep 2019 18:08:12 +0800 Subject: [Agda] the recursive definition can not terminate Message-ID: Hi. I am doing the exercise from the chapter 3 in https://plfa.github.io/Relations/. The last one: Can x --------------- to (from x) ? x seem too difficult for me using what the book said in first 3 chapters. I have the last try: use t1 and t2 recursive declaration. I got error like this: Termination checking failed for the following functions: t2, t1 Problematic calls: t1 (x1 x) x1 cx One1 (at /Users/jiamo/agda/ylib/src/ylib/can.agda:146,39-41) t2 (x0 x) x0 cx One1 (at /Users/jiamo/agda/ylib/src/ylib/can.agda:156,30-32) The total agda file is self-sufficiency for someone have interest to have a look. https://gist.github.com/jiamo/af8cd8dd5a4702f81ca6dde04f8e00de And I still wonder this problem should have a very simple answer like what I do for can_inc : ? {x : Bin} ? Can x ------------- ? Can (inc x) can_inc {_} (Can_One cx) = Can_One(one_inc cx) can_inc { (x0 nil) } (Can_Zero) = Can_One(One1) Appreciate for any suggestion. From nicolas.pouillard+agda at gmail.com Thu Sep 12 15:16:59 2019 From: nicolas.pouillard+agda at gmail.com (Nicolas Pouillard) Date: Thu, 12 Sep 2019 15:16:59 +0200 Subject: [Agda] Last minute proposals for the Agda logo Message-ID: Dear all, At the current Agda meeting in Munich (AIM XXX), I have been tasked to conduct a poll aiming at selecting a logo for Agda. Here is the list of proposed logos so far: https://wiki.portal.chalmers.se/agda/pmwiki.php?n=AIMXXIII.LogoCompetition If you have any last minute proposal you have until Saturday noon (12:00 CEST) to add them to this wiki page. Note that a preselection may be performed before launching the poll (e.g., to filter out Agdy McAgdaface proposals). Saturday afternoon you will receive another email with the details of the poll. Best regards, Nicolas Pouillard -------------- next part -------------- An HTML attachment was scrubbed... URL: From Graham.Hutton at nottingham.ac.uk Mon Sep 16 10:32:53 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Mon, 16 Sep 2019 08:32:53 +0000 Subject: [Agda] MPC 2019 - final call for participation Message-ID: Dear all, Final call for participation for the Mathematics of Program Construction (MPC) conference in Portugal. MPC 2019 will feature 15 research papers and 4 keynotes, and is co-located with Formal Methods 2019 and many other events. See you in Porto! https://tinyurl.com/MPC-Porto Best wishes, Graham Hutton Program Chair, MPC 2019 ====================================================================== *** FINAL CALL FOR PARTICIPATION -- MPC 2019 *** 13th International Conference on Mathematics of Program Construction 7-9 October 2019, Porto, Portugal Co-located with Formal Methods 2019 https://tinyurl.com/MPC-Porto ====================================================================== PROGRAM: https://tinyurl.com/yxvvc5vb ACCEPTED PAPERS: https://tinyurl.com/yyuhy8ze REGISTRATION AND TRAVEL: https://tinyurl.com/y4uetlsr KEYNOTE SPEAKERS: Assia Mahboubi (MPC) INRIA, France Annabelle McIver (MPC) Macquarie University, Australia Tony Hoare (UTP) Oxford University, UK Shriram Krishnamurthi (FM) Brown University, USA BACKGROUND: The International Conference on Mathematics of Program Construction (MPC) aims to promote the development of mathematical principles and techniques that are demonstrably practical and effective in the process of constructing computer programs. MPC 2019 will be held in Porto, Portugal from 7-9 October 2019, and is co-located with the International Symposium on Formal Methods, FM 2019. Previous conferences were held in K?nigswinter, Germany (2015); Madrid, Spain (2012); Qu?bec City, Canada (2010); Marseille, France (2008); Kuressaare, Estonia (2006); Stirling, UK (2004); Dagstuhl, Germany (2002); Ponte de Lima, Portugal (2000); Marstrand, Sweden (1998); Kloster Irsee, Germany (1995); Oxford, UK (1992); Twente, The Netherlands (1989). PROGRAM COMMITTEE: Patrick Bahr IT University of Copenhagen, Denmark Richard Bird University of Oxford, UK Corina C?rstea University of Southampton, UK Brijesh Dongol University of Surrey, UK Jo?o F. Ferreira University of Lisbon, Portugal Jennifer Hackett University of Nottingham, UK William Harrison University of Missouri, USA Ralf Hinze University of Kaiserslautern, Germany Zhenjiang Hu National Institute of Informatics, Japan Graham Hutton (chair) University of Nottingham, UK Cezar Ionescu University of Oxford, UK Mauro Jaskelioff National University of Rosario, Argentina Ranjit Jhala University of California, USA Gabriele Keller Utrecht University, The Netherlands Ekaterina Komendantskaya Heriot-Watt University, UK Chris Martens North Carolina State University, USA Bernhard M?ller University of Augsburg, Germany Shin-Cheng Mu Academia Sinica, Taiwan Mary Sheeran Chalmers University of Technology, Sweden Alexandra Silva University College London, UK Georg Struth University of Sheffield, UK For any queries about the program please contact the program chair, Graham Hutton . CONFERENCE VENUE: The conference will be held at the Alf?ndega Porto Congress Centre, a 150 year old former custom's house located in the historic centre of Porto on the bank of the river Douro. The venue was renovated by a Pritzer prize winning architect and has received many awards. LOCAL ORGANISER: Jos? Nuno Oliveira University of Minho, Portugal For any queries about local issues please contact the local organiser, Jos? Nuno Oliveira . ====================================================================== This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From tarmo at cs.ioc.ee Tue Sep 17 09:34:05 2019 From: tarmo at cs.ioc.ee (Tarmo Uustalu) Date: Tue, 17 Sep 2019 10:34:05 +0300 Subject: [Agda] NWPT 2019 submission deadline extended Message-ID: <20190917103405.3931fc3b@cs.ioc.ee> Extended submission deadline: 26 September 2019 CALL FOR CONTRIBUTIONS 31st Nordic Workshop on Programming Theory, NWPT 2019 Tallinn, Estonia, 13-15 November 2019 http://cs.ttu.ee/events/nwpt2019 Important Dates Submission of abstracts 26 September 2019 Notification 7 October 2019 Final versions 15 October 2019 Registration 15 October 2019 Background The NWPT series of annual workshops is a forum bringing together programming theorists from the Nordic and Baltic countries, but also from elsewhere. List of Topics Semantics of programming languages Programming language design and programming methodology Programming logics Formal specification of programs Program verification Program construction Tools for program verification and construction Program transformation and refinement Real-time and hybrid systems Models of concurrency and distributed computing Model-based testing Language-based security Invited Speakers Mohamed Bettaz, Philadelphia University, Amman, Jordan Ando Saabas, Bolt, Estonia Pawel Sobocinski, Tallinn University of Technology, Estonia Submission Guidelines Authors wishing to give a talk at the workshop are requested to submit abstracts of 2-3 pages (pdf, printable on A4 paper, using easychair.cls) through EasyChair (https://easychair.org/conferences/?conf=nwpt2019) by 26 September 2019. Work in progress as well as abstracts of manuscripts submitted for formal publication elsewhere are permitted. The abstracts of the accepted contributions will be available electronically before the workshop. By submitting to EasyChair you agree that your abstract will be publicly available. Moreover, you as an author are responsible for the content. Post-workshop Publication We have arranged a special issue of the Journal of Logical and Algebraic Methods in Programming (JLAMP) devoted to the best contributions to the workshop. The contributions will be selected by the PC. They will be invited after the workshop and will undergo a rigorous, journal-strength review process according to the standards of JLAMP. Program Committee Antonis Achilleos, Reykjav?k University, Iceland Johannes Borgstr?m, Uppsala University, Sweden Martin Elsman, University of Copenhagen, Denmark Daniel Fava, University of Oslo, Norway John Gallagher, RUC, Denmark Michael R. Hansen, DTU, Denmark Magne Haveraaen, University of Bergen, Norway Keijo Heljanko, University of Helsinki, Finland Thomas T. Hildebrandt, ITU Copenhagen, Denmark Einar Broch Johnsen, University of Oslo, Norway Jaakko J?rvi, University of Bergen, Norway Yngve Lamo, Western Norway Univ. of Applied Sciences, Norway Kim G. Larsen, Aalborg University, Denmark Alberto Lluch Lafuente, DTU, Denmark Fabrizio Montesi, University of Southern Denmark, Denmark Wojciech Mostowski, Halmstad University, Sweden Olaf Owe, University of Oslo, Norway Philipp R?mmer, Uppsala University, Sweden Gerardo Schneider, University of Gothenburg, Sweden Cristina Seceleanu, M?lardalen University, Sweden Jiri Srba, Aalborg University, Denmark Tarmo Uustalu, Reykjav?k University, Iceland J?ri Vain, Tallinn University of Techn., Estonia Antti Valmari, University of Jyv?skyl?, Finland Marina Wald?n, ?bo Akademi University, Finland Organizing Committee J?ri Vain (chair) Tarmo Uustalu Leonidas Tsiopoulos Juhan Ernits Marko K??ramees Venue The 31st Nordic Workshop on Programming Theory 2019 will take place in the campus of Tallinn University of Technology. Contact Further information can be obtained by mailing the organizers at nwpt2019 at ttu.ee. From nicolas.pouillard+agda at gmail.com Tue Sep 17 14:31:20 2019 From: nicolas.pouillard+agda at gmail.com (Nicolas Pouillard) Date: Tue, 17 Sep 2019 14:31:20 +0200 Subject: [Agda] About the logo poll and its issues Message-ID: Hello Agda list members, Administrating the poll through CIVS has not been entirely smooth so far. * Sending the ~600 emails didn't work well the first time only the first ~100 received it. Then I sent the rest by batches of 100. * You have received it in french because the website supports various languages but implicitly sends them in the same language as the setting of the browser of the administrator. * Some people have reported that their logo is not in the list or that only one version should be or should be split. * One cannot change the the proposals after the poll is started. * ~90 people already voted. Either we continue with this poll and I resend emails in English (this does not allow to vote twice), or we start a new one which can allow minor changes to the list of proposal at the cost of making re-vote those who did. I will act on one of these choices this evening. I'd be glad to read your feedback meanwhile. Let's keep in mind that while the choice of the logo is important, the goal is to balance the following: * The list of proposal should match what the community proposed. * The list of members should represent the Agda community. * The process should be simple enough and trustworthy. * The voluntary time to run the poll should be manageable. Best regards, -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.pouillard+agda at gmail.com Wed Sep 18 02:41:28 2019 From: nicolas.pouillard+agda at gmail.com (Nicolas Pouillard) Date: Wed, 18 Sep 2019 02:41:28 +0200 Subject: [Agda] About the logo poll and its issues In-Reply-To: References: Message-ID: I have decided to make a second poll to fix the issues of the first one. All the e-mail tokens have been sent, check in your spam folder. Otherwise tell me. On Tue, Sep 17, 2019 at 2:31 PM Nicolas Pouillard < nicolas.pouillard+agda at gmail.com> wrote: > Hello Agda list members, > > Administrating the poll through CIVS has not been entirely smooth so far. > > * Sending the ~600 emails didn't work well the first time only the first > ~100 received it. Then I sent the rest by batches of 100. > * You have received it in french because the website supports various > languages but implicitly sends them in the same language as the setting of > the browser of the administrator. > * Some people have reported that their logo is not in the list or that > only one version should be or should be split. > * One cannot change the the proposals after the poll is started. > * ~90 people already voted. > > Either we continue with this poll and I resend emails in English (this > does not allow to vote twice), > or we start a new one which can allow minor changes to the list of > proposal at the cost of making re-vote those who did. > > I will act on one of these choices this evening. I'd be glad to read your > feedback meanwhile. > > Let's keep in mind that while the choice of the logo is important, the > goal is to balance the following: > > * The list of proposal should match what the community proposed. > * The list of members should represent the Agda community. > * The process should be simple enough and trustworthy. > * The voluntary time to run the poll should be manageable. > > Best regards, > > -------------- next part -------------- An HTML attachment was scrubbed... URL: From ksk at riec.tohoku.ac.jp Wed Sep 18 03:45:13 2019 From: ksk at riec.tohoku.ac.jp (Keisuke Nakano) Date: Wed, 18 Sep 2019 10:45:13 +0900 Subject: [Agda] FLOPS 2020 First Call for papers Message-ID: FIRST Call For Papers FLOPS 2020: 15th International Symposium on Functional and Logic Programming =============================== 23-25 April, 2020, Akita, Japan https://www.ipl.riec.tohoku.ac.jp/FLOPS2020/ Writing down detailed computational steps is not the only way of programming. An alternative, being used increasingly in practice, is to start by writing down the desired properties of the result. The computational steps are then (semi-)automatically derived from these higher-level specifications. Examples of this declarative style of programming include functional and logic programming, program transformation and rewriting, and extracting programs from proofs of their correctness. FLOPS aims to bring together practitioners, researchers and implementors of the declarative programming paradigm, to discuss mutually interesting results and common problems: theoretical advances, their implementations in language systems and tools, and applications of these systems in practice. The scope includes all aspects of the design, semantics, theory, applications, implementations, and teaching of declarative programming. FLOPS specifically aims to promote cross-fertilization between theory and practice and among different styles of declarative programming. *** Scope *** FLOPS solicits original papers in all areas of the declarative programming: * functional, logic, functional-logic programming, rewriting systems, formal methods and model checking, program transformations and program refinements, developing programs with the help of theorem provers or SAT/SMT solvers, verifying properties of programs using declarative programming techniques; * foundations, language design, implementation issues (compilation techniques, memory management, run-time systems, etc.), applications and case studies. FLOPS promotes cross-fertilization among different styles of declarative programming. Therefore, research papers must be written to be understandable by the wide audience of declarative programmers and researchers. In particular, each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant for its area, and comparing it with previous work. Submission of system descriptions and declarative pearls are especially encouraged. *** Submission *** Submissions should fall into one of the following categories: * Regular research papers: they should describe new results and will be judged on originality, correctness, and significance. * System descriptions: they should describe a working system and will be judged on originality, usefulness, and design. * Declarative pearls: new and excellent declarative programs or theories with illustrative applications. System descriptions and declarative pearls must be explicitly marked as such in the title. Submissions must be unpublished and not submitted for publication elsewhere. Work that already appeared in unpublished or informally published workshops proceedings may be submitted. See also ACM SIGPLAN Republication Policy, as explained on the web at http://www.sigplan.org/Resources/Policies/Republication. Submissions must be written in English and can be up to 15 pages excluding references, though system descriptions and pearls are typically shorter. The formatting has to conform to Springer's guidelines. Regular research papers should be supported by proofs and/or experimental results. In case of lack of space, this supporting information should be made accessible otherwise (e.g., a link to an anonymized Web page or an appendix, which does not count towards the page limit). However, it is the responsibility of the authors to guarantee that their paper can be understood and appreciated without referring to this supporting information; reviewers may simply choose not to look at it when writing their review. FLOPS 2020 will employ a lightweight double-blind reviewing process. To facilitate this, submitted papers must adhere to two rules: 1. author names and institutions must be omitted, and 2. references to authors' own related work should be in the third person (e.g., not "We build on our previous work ?" but rather "We build on the work of ?"). The purpose of this process is to help the reviewers come to an initial judgement about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult (e.g., important background references should not be omitted or anonymized). In addition, authors should feel free to disseminate their ideas or draft versions of their paper as they normally would. For instance, authors may post drafts of their papers on the web or give talks on their research ideas. Papers should be submitted electronically at EasyChair which will be available soon from the Web Site of FLOPS 2020. *** Proceedings *** The proceedings will be published by Springer International Publishing in the Lecture Notes in Computer Science (LNCS) series. *** Important Dates *** 15 November 2019 (AoE): Abstract submission 22 November 2019 (AoE): Submission deadline 24 January 2020: Author notification 16 February 2020: Camera ready due 23-25 April 2020: FLOPS Symposium *** Organizers *** Keisuke Nakano Tohoku University, Japan (PC Co-Chair, General Chair) Kostis Sagonas Uppsala University, Sweden (PC Co-Chair) Kazuyuki Asada Tohoku University, Japan (Local Co-Chair) Ryoma Sin'ya Akita University, Japan (Local Co-Chair) Katsuhiro Ueno Tohoku University, Japan (Local Co-Chair) *** Contact Address *** flops2020 _AT_ easychair.org ------------------------------------------------------------------------------- > From life.130815 at gmail.com Thu Sep 19 14:50:31 2019 From: life.130815 at gmail.com (mo jia) Date: Thu, 19 Sep 2019 20:50:31 +0800 Subject: [Agda] the recursive definition can not terminate In-Reply-To: References: Message-ID: While no one answer my question.( I think it is my problem to ask such question) Finally I work out this problem. After read https://plfa.github.io/Isomorphism/ I find the `Bin` can have some same property like Nat (comm and distrib and +-suc) What I learn so for: 1. `cong` should apply on a small step ( If left side is (x0 x) you should cong on (x) ). Otherwise it will not terminate) 2. `inc-b+` is the key to do the problem. So we need to understand the "Isomorphism" and learn to find the same property (this example is `+-suc`) Well. I post my solution and appreciate for any suggestion. On Thu, Sep 12, 2019 at 6:08 PM mo jia wrote: > > Hi. > > I am doing the exercise from the chapter 3 in https://plfa.github.io/Relations/. > > The last one: > > Can x > --------------- > to (from x) ? x > > seem too difficult for me using what the book said in first 3 chapters. > > I have the last try: use t1 and t2 recursive declaration. > > I got error like this: > > Termination checking failed for the following functions: > t2, t1 > Problematic calls: > t1 (x1 x) x1 cx One1 > (at /Users/jiamo/agda/ylib/src/ylib/can.agda:146,39-41) > t2 (x0 x) x0 cx One1 > (at /Users/jiamo/agda/ylib/src/ylib/can.agda:156,30-32) > > The total agda file is self-sufficiency for someone have interest to > have a look. > > https://gist.github.com/jiamo/af8cd8dd5a4702f81ca6dde04f8e00de > > And I still wonder this problem should have a very simple answer like > what I do for > > can_inc : ? {x : Bin} > ? Can x > ------------- > ? Can (inc x) > can_inc {_} (Can_One cx) = Can_One(one_inc cx) > can_inc { (x0 nil) } (Can_Zero) = Can_One(One1) > > Appreciate for any suggestion. -------------- next part -------------- A non-text attachment was scrubbed... Name: can.agda Type: application/octet-stream Size: 10777 bytes Desc: not available URL: From shulman at sandiego.edu Sat Sep 21 00:22:55 2019 From: shulman at sandiego.edu (Michael Shulman) Date: Fri, 20 Sep 2019 15:22:55 -0700 Subject: [Agda] binding variables in rewrite pragma Message-ID: I've been playing around with the REWRITE pragma, and I'm getting an error message that I don't understand: {-# OPTIONS --rewriting #-} infix 10 _?_ postulate _?_ : {A : Set} ? A ? A ? Set {-# BUILTIN REWRITE _?_ #-} data _?_ (A B : Set) : Set where _,_ : A ? B ? A ? B fst : (A B : Set) (s : A ? B) ? A fst A B (x , y) = x postulate foo : {A : Set} (B : A ? Set) ? Set foo0 : {A : Set} (B C : A ? Set) ? foo B bar : {A : Set} (B : A ? Set) (f : (x : A) ? B x) ? foo B bar-fst : (A : Set) (B C : A ? Set) (u : (x : A) ? B x ? C x) ? bar B (? (x : A) ? fst (B x) (C x) (u x)) ? foo0 B C {-# REWRITE bar-fst #-} This produces the error "bar-fst is not a legal rewrite rule, since the following variables are not bound by the left hand side: C when checking the pragma REWRITE bar-fst" I don't understand why C is not bound by the LHS. Can anyone explain? From andreas.abel at ifi.lmu.de Sat Sep 21 08:46:01 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Sat, 21 Sep 2019 08:46:01 +0200 Subject: [Agda] the recursive definition can not terminate In-Reply-To: References: Message-ID: > While no one answer my question.( I think it is my problem to ask such question) Yes, we cannot help with exercises for the obvious reason. And please do not post solutions to exercises publicly, also for the obvious reason. Best, Andreas On 2019-09-19 14:50, mo jia wrote: > While no one answer my question.( I think it is my problem to ask such question) > Finally I work out this problem. > After read https://plfa.github.io/Isomorphism/ I find the `Bin` can > have some same property like Nat > (comm and distrib and +-suc) > > What I learn so for: > 1. `cong` should apply on a small step ( If left side is (x0 x) you > should cong on (x) ). Otherwise it will not terminate) > 2. `inc-b+` is the key to do the problem. So we need to understand the > "Isomorphism" and learn to find the same property (this example is > `+-suc`) > > Well. I post my solution and appreciate for any suggestion. > > > On Thu, Sep 12, 2019 at 6:08 PM mo jia wrote: >> >> Hi. >> >> I am doing the exercise from the chapter 3 in https://plfa.github.io/Relations/. >> >> The last one: >> >> Can x >> --------------- >> to (from x) ? x >> >> seem too difficult for me using what the book said in first 3 chapters. >> >> I have the last try: use t1 and t2 recursive declaration. >> >> I got error like this: >> >> Termination checking failed for the following functions: >> t2, t1 >> Problematic calls: >> t1 (x1 x) x1 cx One1 >> (at /Users/jiamo/agda/ylib/src/ylib/can.agda:146,39-41) >> t2 (x0 x) x0 cx One1 >> (at /Users/jiamo/agda/ylib/src/ylib/can.agda:156,30-32) >> >> The total agda file is self-sufficiency for someone have interest to >> have a look. >> >> https://gist.github.com/jiamo/af8cd8dd5a4702f81ca6dde04f8e00de >> >> And I still wonder this problem should have a very simple answer like >> what I do for >> >> can_inc : ? {x : Bin} >> ? Can x >> ------------- >> ? Can (inc x) >> can_inc {_} (Can_One cx) = Can_One(one_inc cx) >> can_inc { (x0 nil) } (Can_Zero) = Can_One(One1) >> >> Appreciate for any suggestion. >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda From andreas.abel at ifi.lmu.de Sat Sep 21 10:14:07 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Sat, 21 Sep 2019 10:14:07 +0200 Subject: [Agda] binding variables in rewrite pragma In-Reply-To: References: Message-ID: This could be a bug, I started to investigate; I'll get back to you on this. --Andreas On 2019-09-21 00:22, Michael Shulman wrote: > I've been playing around with the REWRITE pragma, and I'm getting an > error message that I don't understand: > > {-# OPTIONS --rewriting #-} > > infix 10 _?_ > postulate > _?_ : {A : Set} ? A ? A ? Set > {-# BUILTIN REWRITE _?_ #-} > > data _?_ (A B : Set) : Set where > _,_ : A ? B ? A ? B > fst : (A B : Set) (s : A ? B) ? A > fst A B (x , y) = x > > postulate > foo : {A : Set} (B : A ? Set) ? Set > foo0 : {A : Set} (B C : A ? Set) ? foo B > bar : {A : Set} (B : A ? Set) (f : (x : A) ? B x) ? foo B > bar-fst : (A : Set) (B C : A ? Set) (u : (x : A) ? B x ? C x) > ? bar B (? (x : A) ? fst (B x) (C x) (u x)) ? foo0 B C > {-# REWRITE bar-fst #-} > > This produces the error > > "bar-fst is not a legal rewrite rule, since the following variables > are not bound by the left hand side: C > when checking the pragma REWRITE bar-fst" > > I don't understand why C is not bound by the LHS. Can anyone explain? > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From andreas.abel at ifi.lmu.de Sat Sep 21 12:41:48 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Sat, 21 Sep 2019 12:41:48 +0200 Subject: [Agda] binding variables in rewrite pragma In-Reply-To: References: Message-ID: <8a10b108-ed4d-1eb2-302d-9fe8148494dd@ifi.lmu.de> It is a bug: https://github.com/agda/agda/issues/4103 The issue description contains suggestions for a workaround. On 2019-09-21 10:14, Andreas Abel wrote: > This could be a bug, I started to investigate; I'll get back to you on > this.? --Andreas > > On 2019-09-21 00:22, Michael Shulman wrote: >> I've been playing around with the REWRITE pragma, and I'm getting an >> error message that I don't understand: >> >> {-# OPTIONS --rewriting #-} >> >> infix 10 _?_ >> postulate >> ?? _?_ : {A : Set} ? A ? A ? Set >> {-# BUILTIN REWRITE _?_ #-} >> >> data _?_ (A B : Set) : Set where >> ?? _,_ : A ? B ? A ? B >> fst : (A B : Set) (s : A ? B) ? A >> fst A B (x , y) = x >> >> postulate >> ?? foo : {A : Set} (B : A ? Set) ? Set >> ?? foo0 : {A : Set} (B C : A ? Set) ? foo B >> ?? bar : {A : Set} (B : A ? Set) (f : (x : A) ? B x) ? foo B >> ?? bar-fst : (A : Set) (B C : A ? Set) (u : (x : A) ? B x ? C x) >> ???? ? bar B (? (x : A) ? fst (B x) (C x) (u x)) ?? foo0 B C >> {-# REWRITE bar-fst #-} >> >> This produces the error >> >> "bar-fst? is not a legal rewrite rule, since the following variables >> are not bound by the left hand side:? C >> when checking the pragma REWRITE bar-fst" >> >> I don't understand why C is not bound by the LHS.? Can anyone explain? >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> From bernardobruno at gmail.com Mon Sep 23 10:50:26 2019 From: bernardobruno at gmail.com (Bruno Bernardo) Date: Mon, 23 Sep 2019 10:50:26 +0200 Subject: [Agda] FMBC 2019 Call for Participation - Porto (Portugal), October 11 Message-ID: [Please accept our apologies for duplicates.] ===================================================== Call for Participation 1st Workshop on Formal Methods for Blockchains (FMBC) 2019 https://sites.google.com/view/fmbc/home Porto, Portugal, October 11 Part of the 3rd World Congress on Formal Methods http://formalmethods2019.inesctec.pt/ ===================================================== About FMBC ---------------- Blockchains are decentralized transactional ledgers that rely on cryptographic hash functions for guaranteeing the integrity of the stored data. Participants on the network reach agreement on what valid transactions are through consensus algorithms. Blockchains may also provide support for Smart Contracts. Smart Contracts are scripts of an ad-hoc programming language that are stored in the blockchain and that run on the network. They can interact with the ledger?s data and update its state. These scripts can express the logic of possibly complex contracts between users of the blockchain. Thus, Smart Contracts can facilitate the economic activity of blockchain participants. With the emergence and increasing popularity of cryptocurrencies such as Bitcoin and Ethereum, it is now of utmost importance to have strong guarantees of the behavior of blockchain so ware. These guarantees can be brought by using Formal Methods. Indeed, Blockchain software encompasses many topics of computer science where using Formal Methods techniques and tools are relevant: consensus algorithms to ensure the liveness and the security of the data on the chain, programming languages specifically designed to write smart contracts, cryptographic protocols, such as zero-knowledge proofs, used to ensure privacy, etc. This workshop is a forum to identify theoretical and practical approaches of formal methods for blockchain technology. Topics include, but are not limited to: * Design and implementation of Smar Contract languages * Formal models of blockchain applications or concepts * Formal methods for consensus protocols * Formal methods for blockchain-specific cryptographic primitives or ? protocols * Formal languages for Smart Contracts * Verification of Smart Contracts Invited Speaker -------------------- Ilya Sergey (Yale-NUS College / NUS School of Computing) Contributed papers -------------------------- See the workshop program at: https://sites.google.com/view/fmbc/program Registration ---------------- Registration is shared for all FM events: http://formalmethods2019.inesctec.pt/?page_id=2363 Attending ------------- See the FM webpage at: http://formalmethods2019.inesctec.pt/?page_id=140 Contact ---------- mailto:fmbc19 at easychair.org From b.a.w.spitters at gmail.com Fri Sep 27 14:07:43 2019 From: b.a.w.spitters at gmail.com (Bas Spitters) Date: Fri, 27 Sep 2019 14:07:43 +0200 Subject: [Agda] PhD and Postdoc positions in Aarhus (DK) Message-ID: *The Department of Computer Science at Aarhus University, Denmark, offers a considerable number of PhD and PostDoc positions in the areas of Logic, Semantics and Programming Languages. Our research spans a wide spectrum of topics concerning models and logics for programming languages and type theories, language-based security, blockchains, theoretical foundations and practical tools for program analysis, formal verification and model checking.Aarhus University admits PhD students on the basis of a bachelor's degree (for 5 year PhDs) or a master's degree (for 3 year PhDs). If admitted, all tuition is covered, and a generous stipend is provided . Postdoc positions can be for 1 or 2 years, and with the possibility of renewal (depending on the individual projects and sources of funding). Interested applicants at all levels are encouraged to contact the respective faculty for details, enclosing a CV and a short description of interests.Logic and Semantics group: http://cs.au.dk/research/logic-and-semantics/ Aslan Askarov (language-based security, web security, type systems, program analysis)Lars Birkedal (higher-order concurrent separation logic , type theory , program verification)Bas Spitters (computer aided proofs in cryptography, homotopy type theory, formal verification of blockchains )Jaco van de Pol (parallel & symbolic model checking, synthesis, graph games)Programming Languages group: https://cs.au.dk/research/programming-languages/ Magnus Madsen (programming language design, functional and logic programming, type systems)Anders M?ller (static & dynamic program analysis, program analysis and automated testing for web and mobile software)Andreas Pavlogiannis (algorithmic & computational foundations of model checking, quantitative verification, static & dynamic analysis, concurrency)Aarhus University is realizing an ambitious multi-phase digitalization initiative which will help prepare researchers, students and the labour force for the digital transition of the future. The initiative aims at significant expansion of the Department of Computer Science for faculty and students.Next deadline: November 1st, 2019Information about the PhD program: http://phd.scitech.au.dk/for-applicants/application-guide/ * -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Sat Sep 28 20:48:19 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Sat, 28 Sep 2019 18:48:19 +0000 Subject: [Agda] good CSS? Message-ID: Hi all, I am wondering if anyone has developed good CSS and javascript that makes generated html look beautiful? Thanks, Jason Hu https://hustmphrrr.github.io/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Sun Sep 29 14:57:54 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sun, 29 Sep 2019 15:57:54 +0300 Subject: [Agda] termination checking loop Message-ID: Dear Agda developers, I have a module Foo.agda in which the last line for `foo' is erroneously set of kind x = x. foo mon {f} nn = begin-p f *pm mon =?[ =?sym .. (*mp-comm mon f) ] mon *mp f =?[ ... ] (mon *? lmF) +mp (mon *mp f?) =?[ ... ] (lmF *? mon) +mp (f? *pm mon) ?p where lmF = lm f nn; f? = tailPol f nn ... f?*m = f?*m -- ** And the type checker of Agda 2.6.0.1 seems to loop infinitely (> 30 minutes, for large memory space). 1) If I replace this marked clause with the needed one, then Foo.agda is type-checked fast. 2) I tried to set a clause of kind x = x in several previous and similar places in Foo.agda, after `where` in "begin-p ... ?p where". And it type-checks fast, reporting "Termination checking failed for the following functions: ...". What might this mean? As I recall, when the type checker loops infinitely, it is considered as a bug. Regards, ------ Sergei From andreas.abel at ifi.lmu.de Sun Sep 29 19:33:31 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Sun, 29 Sep 2019 19:33:31 +0200 Subject: [Agda] termination checking loop In-Reply-To: References: Message-ID: Dear Sergei, Can't judge from the information in your message. Please provide a reproducible test case. Best, Andreas On 2019-09-29 14:57, mechvel at scico.botik.ru wrote: > Dear Agda developers, > > I have a module Foo.agda in which the last line for `foo' is erroneously > set of kind? x = x. > > foo mon {f} nn = > ? begin-p > ??? f *pm mon?????????????????????? =?[ =?sym .. (*mp-comm mon f) ] > ??? mon *mp f?????????????????????? =?[ ... ] > ??? (mon *? lmF) +mp (mon *mp f?)?? =?[ ... ] > ??? (lmF *? mon) +mp (f? *pm mon) > ? ?p > ? where > ? lmF = lm f nn;?? f? = tailPol f nn > ? ... > ? f?*m = f?*m??? -- ** > > And the type checker of? Agda 2.6.0.1? seems to loop infinitely (> 30 > minutes, for large memory space). > > 1) If I replace this marked clause with the needed one, then Foo.agda is > type-checked fast. > 2) I tried to set a clause of kind? x = x? in several previous and > similar places in Foo.agda, > ?? after `where` in "begin-p ... ?p where". > ?? And it type-checks fast, reporting "Termination checking failed for > the following functions: ...". > > What might this mean? > As I recall, when the type checker loops infinitely, it is considered as > a bug. > > Regards, > > ------ > Sergei > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mechvel at scico.botik.ru Sun Sep 29 20:05:52 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sun, 29 Sep 2019 21:05:52 +0300 Subject: [Agda] termination checking loop In-Reply-To: References: Message-ID: <4721dc90744c7482d4bf43c850118283@scico.botik.ru> On 2019-09-29 20:33, Andreas Abel wrote: > [..]> > Can't judge from the information in your message. Please provide a > reproducible test case. > [..] It is difficult to reduce the example. Because it is large, and needs to run the type checker during many minutes after each step of the code change. Is there any other approach possible? (1) I can provide a large example right now, almost as it is (probably it can be reduced several times). (2) I can try to reduce it, but this attempt can happen after about October 20. What would you choose of these two? -- SM > > On 2019-09-29 14:57, mechvel at scico.botik.ru wrote: >> Dear Agda developers, >> >> I have a module Foo.agda in which the last line for `foo' is >> erroneously set of kind? x = x. >> >> foo mon {f} nn = >> ? begin-p >> ??? f *pm mon?????????????????????? =?[ =?sym .. (*mp-comm mon f) ] >> ??? mon *mp f?????????????????????? =?[ ... ] >> ??? (mon *? lmF) +mp (mon *mp f?)?? =?[ ... ] >> ??? (lmF *? mon) +mp (f? *pm mon) >> ? ?p >> ? where >> ? lmF = lm f nn;?? f? = tailPol f nn >> ? ... >> ? f?*m = f?*m??? -- ** >> >> And the type checker of? Agda 2.6.0.1? seems to loop infinitely (> 30 >> minutes, for large memory space). >> >> 1) If I replace this marked clause with the needed one, then Foo.agda >> is type-checked fast. >> 2) I tried to set a clause of kind? x = x? in several previous and >> similar places in Foo.agda, >> ?? after `where` in "begin-p ... ?p where". >> ?? And it type-checks fast, reporting "Termination checking failed >> for the following functions: ...". >> >> What might this mean? >> As I recall, when the type checker loops infinitely, it is considered >> as a bug. >> >> Regards, >> >> ------ >> Sergei >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda From andreas.abel at ifi.lmu.de Sun Sep 29 20:13:50 2019 From: andreas.abel at ifi.lmu.de (Andreas Abel) Date: Sun, 29 Sep 2019 20:13:50 +0200 Subject: [Agda] termination checking loop In-Reply-To: <4721dc90744c7482d4bf43c850118283@scico.botik.ru> References: <4721dc90744c7482d4bf43c850118283@scico.botik.ru> Message-ID: Smaller examples are better. I am happy to wait until after October 20. Best, Andreas On 2019-09-29 20:05, mechvel at scico.botik.ru wrote: > On 2019-09-29 20:33, Andreas Abel wrote: >> [..]> >> Can't judge from the information in your message.? Please provide a >> reproducible test case. >> [..] > > It is difficult to reduce the example. Because it is large, and needs to > run the type checker during > many minutes after each step of the code change. Is there any other > approach possible? > > (1) I can provide a large example right now, almost as it is > ??? (probably it can be reduced several times). > (2) I can try to reduce it, but this attempt can happen after about > October 20. > > What would you choose of these two? > > -- > SM > > >> >> On 2019-09-29 14:57, mechvel at scico.botik.ru wrote: >>> Dear Agda developers, >>> >>> I have a module Foo.agda in which the last line for `foo' is >>> erroneously set of kind? x = x. >>> >>> foo mon {f} nn = >>> ?? begin-p >>> ???? f *pm mon?????????????????????? =?[ =?sym .. (*mp-comm mon f) ] >>> ???? mon *mp f?????????????????????? =?[ ... ] >>> ???? (mon *? lmF) +mp (mon *mp f?)?? =?[ ... ] >>> ???? (lmF *? mon) +mp (f? *pm mon) >>> ?? ?p >>> ?? where >>> ?? lmF = lm f nn;?? f? = tailPol f nn >>> ?? ... >>> ?? f?*m = f?*m??? -- ** >>> >>> And the type checker of? Agda 2.6.0.1? seems to loop infinitely (> 30 >>> minutes, for large memory space). >>> >>> 1) If I replace this marked clause with the needed one, then Foo.agda >>> is type-checked fast. >>> 2) I tried to set a clause of kind? x = x? in several previous and >>> similar places in Foo.agda, >>> ??? after `where` in "begin-p ... ?p where". >>> ??? And it type-checks fast, reporting "Termination checking failed >>> for the following functions: ...". >>> >>> What might this mean? >>> As I recall, when the type checker loops infinitely, it is considered >>> as a bug. >>> >>> Regards, >>> >>> ------ >>> Sergei >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda > From wadler at inf.ed.ac.uk Tue Oct 1 11:30:33 2019 From: wadler at inf.ed.ac.uk (Philip Wadler) Date: Tue, 1 Oct 2019 10:30:33 +0100 Subject: [Agda] good CSS? In-Reply-To: References: Message-ID: I think that PLFA looks pretty good. plfa.inf.ed.ac.uk All the relevant tools were assembled by Wen Kokke. Cheers, -- P . \ Philip Wadler, Professor of Theoretical Computer Science, . /\ School of Informatics, University of Edinburgh . / \ and Senior Research Fellow, IOHK . http://homepages.inf.ed.ac.uk/wadler/ On Sat, 28 Sep 2019 at 19:49, Jason -Zhong Sheng- Hu wrote: > Hi all, > > I am wondering if anyone has developed good CSS and javascript that makes > generated html look beautiful? > > *Thanks,* > *Jason Hu* > *https://hustmphrrr.github.io/ * > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: not available URL: From selinger at mathstat.dal.ca Tue Oct 1 16:58:06 2019 From: selinger at mathstat.dal.ca (selinger at mathstat.dal.ca) Date: Tue, 1 Oct 2019 14:58:06 +0000 Subject: [Agda] question about termination checker Message-ID: Hello, perhaps this is a dumb question, but it has stumped me. Why does the termination checker accept lemma1, but not lemma2? Using Agda 2.6.0.1. Thanks, -- Peter data Nat : Set where zero : Nat succ : Nat -> Nat lemma1 : Nat -> Nat lemma1 zero = zero lemma1 (succ zero) = zero lemma1 (succ (succ x)) = lemma1 (succ x) lemma2 : Nat -> Nat lemma2 zero = zero lemma2 (succ zero) = zero lemma2 (succ (succ x)) = ih where ih = lemma2 (succ x) From nad at cse.gu.se Tue Oct 1 17:25:03 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Tue, 1 Oct 2019 17:25:03 +0200 Subject: [Agda] question about termination checker In-Reply-To: References: Message-ID: <7fce1554-f843-c131-d6a4-25abca484633@cse.gu.se> On 01/10/2019 16.58, selinger at mathstat.dal.ca wrote: > lemma2 : Nat -> Nat > lemma2 zero = zero > lemma2 (succ zero) = zero > lemma2 (succ (succ x)) = ih > where > ih = lemma2 (succ x) This is expanded to something like the following code: mutual ih : Nat -> Nat ih x = lemma2 (succ x) lemma2 : Nat -> Nat lemma2 zero = zero lemma2 (succ zero) = zero lemma2 (succ (succ x)) = ih x The termination checker accepts your code if you use --termination-depth=2. -- /NAD From fdhzs2010 at hotmail.com Thu Oct 3 19:14:13 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Thu, 3 Oct 2019 17:14:13 +0000 Subject: [Agda] good CSS? In-Reply-To: References: , Message-ID: Hi Phil, thank you. I will check how to integrate PLFA's css into my html. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Philip Wadler Sent: October 1, 2019 5:30 AM To: Jason -Zhong Sheng- Hu Cc: agda at lists.chalmers.se Subject: Re: [Agda] good CSS? I think that PLFA looks pretty good. plfa.inf.ed.ac.uk All the relevant tools were assembled by Wen Kokke. Cheers, -- P . \ Philip Wadler, Professor of Theoretical Computer Science, . /\ School of Informatics, University of Edinburgh . / \ and Senior Research Fellow, IOHK . http://homepages.inf.ed.ac.uk/wadler/ On Sat, 28 Sep 2019 at 19:49, Jason -Zhong Sheng- Hu > wrote: Hi all, I am wondering if anyone has developed good CSS and javascript that makes generated html look beautiful? Thanks, Jason Hu https://hustmphrrr.github.io/ _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.pouillard+agda at gmail.com Sun Oct 6 17:09:46 2019 From: nicolas.pouillard+agda at gmail.com (Nicolas Pouillard) Date: Sun, 6 Oct 2019 17:09:46 +0200 Subject: [Agda] Agda Logo Poll Results Message-ID: Dear list members, Here are the results of the poll organized to choose the Agda logo: https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_ce6fe5e2a518ac98 Out of 619 allowed participants, 117 have voted. The results are pretty clear has we have a condorcet winner. I have not access to more details than what is available on this page. Best regards, Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Mon Oct 7 06:07:25 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Mon, 7 Oct 2019 04:07:25 +0000 Subject: [Agda] Agda Logo Poll Results In-Reply-To: References: Message-ID: Oh so my favorite didn't win. sad. how should I interpret "loses to ... by x - y"? does that mean there are x persons liking the winning logo while only y persons like the losing logo? Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of Nicolas Pouillard Sent: October 6, 2019 11:09 AM To: Agda mailing list Subject: [Agda] Agda Logo Poll Results Dear list members, Here are the results of the poll organized to choose the Agda logo: https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_ce6fe5e2a518ac98 Out of 619 allowed participants, 117 have voted. The results are pretty clear has we have a condorcet winner. I have not access to more details than what is available on this page. Best regards, Nicolas -------------- next part -------------- An HTML attachment was scrubbed... URL: From nicolas.pouillard+agda at gmail.com Mon Oct 7 08:53:07 2019 From: nicolas.pouillard+agda at gmail.com (Nicolas Pouillard) Date: Mon, 7 Oct 2019 08:53:07 +0200 Subject: [Agda] Agda Logo Poll Results In-Reply-To: References: Message-ID: I would say that "A loses to B by x - y" means that x people have ranked A > B and y people have ranked B > A. On Mon, Oct 7, 2019, 06:07 Jason -Zhong Sheng- Hu wrote: > Oh so my favorite didn't win. sad. how should I interpret "loses to ... by > x - y"? does that mean there are x persons liking the winning logo while > only y persons like the losing logo? > > *Thanks,* > *Jason Hu* > *https://hustmphrrr.github.io/ * > ------------------------------ > *From:* Agda on behalf of Nicolas > Pouillard > *Sent:* October 6, 2019 11:09 AM > *To:* Agda mailing list > *Subject:* [Agda] Agda Logo Poll Results > > Dear list members, > > Here are the results of the poll organized to choose the Agda logo: > > https://civs.cs.cornell.edu/cgi-bin/results.pl?id=E_ce6fe5e2a518ac98 > > Out of 619 allowed participants, 117 have voted. > The results are pretty clear has we have a condorcet winner. > I have not access to more details than what is available on this page. > > Best regards, > Nicolas > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Mon Oct 7 14:01:59 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Mon, 7 Oct 2019 14:01:59 +0200 Subject: [Agda] New blog post: Formalize All the Things (in Agda) Message-ID: Hi Agda people, I wrote a new blog post on formalizing things in Agda: https://jesper.sikanda.be/posts/formalize-all-the-things.html I hope you find it useful. It is meant to be an introductory post, so let me know if there's anything that can be clarified! -- Jesper -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Mon Oct 7 19:46:34 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 07 Oct 2019 20:46:34 +0300 Subject: [Agda] New blog post: Formalize All the Things (in Agda) In-Reply-To: References: Message-ID: On 2019-10-07 15:01, Jesper Cockx wrote: > Hi Agda people, > > I wrote a new blog post on formalizing things in Agda: > https://jesper.sikanda.be/posts/formalize-all-the-things.html I hope > you find it useful. It is meant to be an > introductory post, so let me know if there's anything that can be > clarified! The main point to explain to a beginner is: why Agda instead of Gallina + Coq ? This explanation is needed because Coq is elder and widely known, and has a much larger functionality in libraries. Personally, I know almost nothing about Gallina and Coq, and cannot name anything besides * pure functionality and lazy evaluation by default. And this is only a matter of a taste. * As to an additional language for proofs, I do not find its necessity in Agda, so far. But I do not know how will it be when some generic prover will be started to really assist composing proofs. * Is Agda really better in programming ordinary evaluation? What about efficient implementation for ordinary programs, about the run-time performance? Regards, ------ Sergei From chiaki.ishio at gmail.com Fri Oct 11 09:34:23 2019 From: chiaki.ishio at gmail.com (=?UTF-8?B?55+z5bC+5Y2D5pm2?=) Date: Fri, 11 Oct 2019 16:34:23 +0900 Subject: [Agda] Question on `unify` function in Reflection API Message-ID: Hello all, I have a question on the `unify` function in Reflection API. I got two minimal examples of multi-step addition of natural numbers (nat.agda, nat-param.agda). In the first example (nat.agda), the goal of the fourth argument is dependent on the second argument, but I can unify the desired constructor. multi-step : Reduce* (E (V 0) (V 1)) (V 1) multi-step = trans* (E (V 0) (V 1)) {!!} -- 2nd arg (V 1) {!runTC!} -- 4th arg, runTC succeeds {!!} In another example (nat-param.agda), datatype definitions are parameterized, but those parameters don't have any real meanings. When I try the following code, `unify` function in Reflection API fails unless I fill up the second argument. multi-step : (v : Typ) ? Reduce* v (E (V 0) (V 1)) (V 1) -- we have a parameter `v` multi-step v = trans* (E (V 0) (V 1)) {!!} -- 2nd arg (V 1) {!runTC!} -- 4th arg, runTC fails {!!} I am not sure why this happens, and not sure of any difference between the `unify` function and the refine command in Emacs Mode. Any comments would be appreciated. Best, Chiaki Ishio chiaki.ishio at gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: nat.agda Type: application/octet-stream Size: 1419 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: nat-param.agda Type: application/octet-stream Size: 1630 bytes Desc: not available URL: From gergo at erdi.hu Fri Oct 11 12:55:42 2019 From: gergo at erdi.hu (=?UTF-8?B?RHIuIMOJUkRJIEdlcmfFkQ==?=) Date: Fri, 11 Oct 2019 12:55:42 +0200 Subject: [Agda] New blog post: Writing Agda blog posts in literate markdown In-Reply-To: References: Message-ID: Is there something similar targeting LaTeX? I've put a question about this here: https://stackoverflow.com/q/58339725/477476 On Tue, Jul 9, 2019 at 6:36 PM Jesper Cockx wrote: > Hi all, > > I just posted a new blog post to > https://jesper.sikanda.be/posts/literate-agda.html about writing blog > posts as literate Agda files. I hope some of you find it useful, and maybe > even are inspired to write your own Agda blogs! > > -- Jesper > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From P.Achten at cs.ru.nl Fri Oct 11 14:36:29 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Fri, 11 Oct 2019 14:36:29 +0200 Subject: [Agda] [TFP'20] one month left for pre-symposium submissions for Trends in Functional Programming 2020, 13-14 February, Krakow, Poland Message-ID: ------------------------------------------------------------------------- ??????????????????? Second call for papers ??????? 21st Symposium on Trends in Functional Programming ????????????????????????? tfp2020.org ------------------------------------------------------------------------- The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions. * TFP is moving to new winter dates, to provide an FP forum in between the ? annual ICFP events. * TFP offers a supportive reviewing process designed to help less experienced ? authors succeed, with two rounds of review, both before and after the ? symposium itself. Authors have an opportunity to address reviewers' concerns ? before final decisions on publication in the proceedings. * TFP offers two "best paper" awards, the John McCarthy award for best paper, ? and the David Turner award for best student paper. * This year we are particularly excited to co-locate with Lambda Days in ? beautiful Krakow. Lambda Days is a vibrant developer conference with hundreds ? of attendees and a lively programme of talks on functional programming in ? practice. TFP will be held in the same venue, and participants will be able ? to session-hop between the two events. Important Dates --------------- Submission deadline for pre-symposium review:?? 15th November, 2019 Submission deadline for draft papers:?????????? 10th January, 2020 Symposium dates:??????????????????????????????? 13-14th February, 2020 Visit tfp2020.org for more information. From henning at basold.eu Fri Oct 11 19:17:20 2019 From: henning at basold.eu (Henning Basold) Date: Fri, 11 Oct 2019 19:17:20 +0200 Subject: [Agda] CMCS 2020: First Call for Papers Message-ID: <3a682134-6674-8250-13cd-1c18ccd68e34@basold.eu> Call for Papers The 15th IFIP WG 1.3 International Workshop on Coalgebraic Methods in Computer Science (CMCS'20) Dublin, Ireland, 25 - 26 April 2020 (co-located with ETAPS 2020) www.coalg.org/cmcs20 Objectives and scope -------------------- Established in 1998, the CMCS workshops aim to bring together researchers with a common interest in the theory of coalgebras, their logics, and their applications. As the workshop series strives to maintain breadth in its scope, areas of interest include neighbouring fields as well. Topics of interest include, but are not limited to, the following: - the theory of coalgebras (including set theoretic and categorical approaches); - coalgebras as computational and semantical models (for programming languages, dynamical systems, term rewriting, etc.); - coalgebras in (functional, object-oriented, concurrent, and constraint) programming; - coalgebraic data types, type systems and behavioural typing; - coinductive definition and proof principles for coalgebras (including "up-to" techniques); - coalgebras and algebras; - coalgebras and (modal) logic; - coalgebraic specification and verification; - coalgebra and control theory (notably of discrete event and hybrid systems); - coalgebra in quantum computing; - coalgebra and game theory; - tools exploiting coalgebraic techniques. Venue and event --------------- CMCS'20 will be held in Dublin, Ireland, co-located with ETAPS 2020 on 25 - 26 April 2020. Important dates (tentative) --------------------------- Abstract regular papers 6 January 2020 Submission regular papers 10 January 2020 Notification 12 February 2020 Camera-ready copy 21 February 2020 Submission short contributions 26 February 2020 Notification short contributions 11 March 2020 Programme committee ------------------- Henning Basold, Leiden University, the Netherlands Nick Bezhanishvili, University of Amsterdam, the Netherlands Corina Cirstea, University of Southampton, United Kingdom Mai Gehrke, CNRS and Universit? C?te d'Azur, France Helle Hvid Hansen, Delft University of Technology, The Netherlands Shin-Ya Katsumata, National Institute of Informatics, Japan Bartek Klin, Warsaw University, Poland Ekaterina Komendantskaya, Heriot-Watt University, United Kingdom Barbara K?nig, University of Duisburg-Essen, Germany Dexter Kozen, Cornell University, USA Clemens Kupke, University of Strathclyde, United Kingdom Alexander Kurz, Chapman University, USA Daniela Petrisan, Universit? Paris 7, France Andrei Popescu, Middlesex University London, United Kingdom Damien Pous, CNRS and ENS Lyon, France Jurriaan Rot, UCL and Radboud University, The Netherlands Davide Sangiorgi, University of Bologna, Italy Ana Sokolova, University of Salzburg, Austria David Sprunger, National Institute of Informatics, Japan Henning Urbat, University of Erlangen-Nuremberg, Germany Fabio Zanasi, University College London, United Kingdom Publicity chair --------------- Henning Basold, Leiden University, The Netherlands PC co-chairs -------------- Daniela Petrisan, Universit? Paris 7, France Jurriaan Rot, UCL and Radboud University, The Netherlands Steering committee ------------------ Filippo Bonchi, University of Pisa, Italy Marcello Bonsangue, Leiden University, The Netherlands Corina Cirstea, University of Southampton, United Kingdom Ichiro Hasuo, National Institute of Informatics, Japan Bart Jacobs, Radboud University Nijmegen, The Netherlands Bartek Klin, University of Warsaw, Poland Alexander Kurz, University of Leicester, United Kingdom Marina Lenisa, University of Udine, Italy Stefan Milius (chair), University of Erlangen-Nuremberg, Germany Larry Moss, Indiana University, USA Dirk Pattinson, Australian National University, Australia Lutz Schr?der, University of Erlangen-Nuremberg, Germany Alexandra Silva, University College London, United Kingdom Submission guidelines --------------------- We solicit two types of contributions: regular papers and short contributions. Regular papers must be original, unpublished, and not submitted for publication elsewhere. They should not exceed 20 pages in length in Springer LNCS style. Short contributions may describe work in progress, or summarise work submitted to a conference or workshop elsewhere. They should be no more than two pages. Regular papers and short contributions should be submitted electronically as a PDF file via the Easychair system at http://www.easychair.org/conferences/?conf=cmcs2020. The proceedings of CMCS 2020 will include all accepted regular papers and will be published post-conference as a Springer volume in the IFIP-LNCS series (pending approval). Accepted short contributions will be bundled in a technical report. -------------- next part -------------- A non-text attachment was scrubbed... Name: pEpkey.asc Type: application/pgp-keys Size: 6454 bytes Desc: not available URL: From asai at is.ocha.ac.jp Mon Oct 14 13:41:46 2019 From: asai at is.ocha.ac.jp (Kenichi Asai) Date: Mon, 14 Oct 2019 20:41:46 +0900 Subject: [Agda] Question on `unify` function in Reflection API In-Reply-To: References: Message-ID: <20191014114146.GA28010@pllab.is.ocha.ac.jp> Dear all, To add a bit more background information, Chiaki wants to write a tactic using Reflection API that can automatically search for the next reduction step for a calculus. As a first step, she considers the addition calculus: E = number | E + E with the reduction rules: left_ : e1 + e2 -> e1' + e2 if e1 -> e1' right_: n1 + e2 -> n1 + e2' if e2 -> e2' plus_ : n + m -> r if n + m is r Then, given (1 + 2) + 3, we know that the first rule to be applied must be left_, and given 0 + 1, the first rule to be applied must be plus_. For now, she writes a macro, runTC, in the file nat.agda that fills the goal with plus_ and observes that it works for 0 + 1. So far, so good. What she wants to formalize is the lambda calculus, and she wants to employ PHOAS by Chlipala for variable binding. When she writes the same thing for the lambda calculus with PHOAS, however, she encounters a mysterious error. The example file, nat-param.agda, is the (extremely) simplified version of it, where she considers only the addition calculus whose terms are parameterized by a type, Typ, which is present but not used at all. Then, the same macro no longer works. Why not? If she enters plus_ in the goal and refine it (C-c C-r), it is accepted. Why doesn't unifying the goal with plus_ in runTC work? Thanks for any help! Sincerely, -- Kenichi Asai On Fri, Oct 11, 2019 at 04:34:23PM +0900, Chiaki Ishio wrote: > Hello all, > > I have a question on the `unify` function in Reflection API. > I got two minimal examples of multi-step addition of natural numbers > (nat.agda, nat-param.agda). > > In the first example (nat.agda), the goal of the fourth argument is > dependent on the second argument, but I can unify the desired constructor. > > multi-step : Reduce* (E (V 0) (V 1)) (V 1) > multi-step = trans* (E (V 0) (V 1)) > {!!} -- 2nd arg > (V 1) > {!runTC!} -- 4th arg, runTC succeeds > {!!} > > In another example (nat-param.agda), datatype definitions are > parameterized, but those parameters don't have any real meanings. > When I try the following code, `unify` function in Reflection API fails > unless I fill up the second argument. > > multi-step : (v : Typ) ? Reduce* v (E (V 0) (V 1)) (V 1) -- we have a > parameter `v` > multi-step v = trans* (E (V 0) (V 1)) > {!!} -- 2nd arg > (V 1) > {!runTC!} -- 4th arg, runTC fails > {!!} > > I am not sure why this happens, and not sure of any difference between the > `unify` function and the refine command in Emacs Mode. > > Any comments would be appreciated. > > Best, > > Chiaki Ishio > chiaki.ishio at gmail.com From yotamdvir at mail.tau.ac.il Tue Oct 15 13:40:14 2019 From: yotamdvir at mail.tau.ac.il (Yotam Dvir) Date: Tue, 15 Oct 2019 14:40:14 +0300 Subject: [Agda] Undocumented (Recursive?) Positivity Checking Message-ID: <6FA39BB2-DBB5-4693-8B41-EE876BA7C4D3@mail.tau.ac.il> Hi there, I was wondering how it is that Agda accepts the following: ```agda data RoseTree (A : Set) : Set where node : A ? (List (RoseTree A)) ? RoseTree A ``` I couldn?t find any literature on this, nor does the documentation explain this. In fact, the documentation rules this out! (see https://agda.readthedocs.io/en/v2.6.0.1/language/data-types.html#strict-positivity ) However, the `POLARITY` pragma helped: (see https://agda.readthedocs.io/en/v2.6.0.1/language/positivity-checking.html#polarity-pragmas ) ```agda postulate F : Set ? Set {-# POLARITY F ++ #-} -- does not compile otherwise data RoseFree (A : Set) : Set where node : A ? (F (RoseFree A)) ? RoseFree A ``` Have I hit the point here, i.e. Agda determines that the polarity of `List`?s first argument is strictly positive? Any explanation or reference will be appreciated. A related less important question: what is the purpose of the polarities `+` and `-`? Seems to me that using `*` instead would never make any difference. Cheers, Yotam -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Tue Oct 15 14:11:13 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Tue, 15 Oct 2019 14:11:13 +0200 Subject: [Agda] Undocumented (Recursive?) Positivity Checking In-Reply-To: <6FA39BB2-DBB5-4693-8B41-EE876BA7C4D3@mail.tau.ac.il> References: <6FA39BB2-DBB5-4693-8B41-EE876BA7C4D3@mail.tau.ac.il> Message-ID: On 15/10/2019 13.40, Yotam Dvir wrote: > Have I hit the point here, i.e. Agda determines that the polarity of > `List`?s first argument is strictly positive? $ cat Test.agda data List {a} (A : Set a) : Set a where [] : List A _?_ : (x : A) (xs : List A) ? List A $ agda -vtc.polarity:10 Test.agda Checking Test ([?]/Test.agda). Polarity of Test.List: [*, +] Polarity of Test.List.[]: [*, *] Polarity of Test.List._?_: [*, *] Polarity of Test._?_-0: [*, *, *] Polarity of Test._?_-1: [*, *, *] > A related less important question: what is the purpose of the polarities `+` and `-`? > Seems to me that using `*` instead would never make any difference. I think these polarities are used by the sized types machinery. -- /NAD From nad at cse.gu.se Tue Oct 15 15:36:17 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Tue, 15 Oct 2019 15:36:17 +0200 Subject: [Agda] Undocumented (Recursive?) Positivity Checking In-Reply-To: References: <6FA39BB2-DBB5-4693-8B41-EE876BA7C4D3@mail.tau.ac.il> Message-ID: <4e714ca5-367e-cad8-564b-a7e9f528137d@cse.gu.se> On 15/10/2019 14.11, Nils Anders Danielsson wrote: > $ agda -vtc.polarity:10 Test.agda > Checking Test ([?]/Test.agda). > Polarity of Test.List: [*, +] > Polarity of Test.List.[]: [*, *] > Polarity of Test.List._?_: [*, *] > Polarity of Test._?_-0: [*, *, *] > Polarity of Test._?_-1: [*, *, *] This answer may have been somewhat misleading. As far as I recall the polarities are not used by the positivity checker. I think the following information might be more relevant to your question: $ agda -vtc.pos:10 --ignore-interfaces Test.agda | grep "args of List" checking args of List args of List = [-[_]->, -[g+]->] -- /NAD From ulf.norell at gmail.com Wed Oct 16 16:03:24 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Wed, 16 Oct 2019 16:03:24 +0200 Subject: [Agda] Question on `unify` function in Reflection API In-Reply-To: References: Message-ID: I get the same behaviour for both nat.agda and nat-param.agda (i.e. runTC succeeds, but leaves an unsolved meta for the proof). It might be worth filing an issue on the bug tracker with more specifics (agda version, what error are you seeing, etc). The main difference between unify and Emacs mode refine is that refine works on the source code level (so refining with plus_ is roughly equivalent to manually replacing the hole with `plus ?` and reloading), whereas unify is working with the internal representations of the type checker. / Ulf On Fri, Oct 11, 2019 at 9:34 AM ???? wrote: > Hello all, > > I have a question on the `unify` function in Reflection API. > I got two minimal examples of multi-step addition of natural numbers > (nat.agda, nat-param.agda). > > In the first example (nat.agda), the goal of the fourth argument is > dependent on the second argument, but I can unify the desired constructor. > > multi-step : Reduce* (E (V 0) (V 1)) (V 1) > multi-step = trans* (E (V 0) (V 1)) > {!!} -- 2nd arg > (V 1) > {!runTC!} -- 4th arg, runTC succeeds > {!!} > > In another example (nat-param.agda), datatype definitions are > parameterized, but those parameters don't have any real meanings. > When I try the following code, `unify` function in Reflection API fails > unless I fill up the second argument. > > multi-step : (v : Typ) ? Reduce* v (E (V 0) (V 1)) (V 1) -- we have a > parameter `v` > multi-step v = trans* (E (V 0) (V 1)) > {!!} -- 2nd arg > (V 1) > {!runTC!} -- 4th arg, runTC fails > {!!} > > I am not sure why this happens, and not sure of any difference between the > `unify` function and the refine command in Emacs Mode. > > Any comments would be appreciated. > > Best, > > Chiaki Ishio > chiaki.ishio at gmail.com > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From chiaki.ishio at gmail.com Sat Oct 19 03:36:05 2019 From: chiaki.ishio at gmail.com (Chiaki Ishio) Date: Sat, 19 Oct 2019 10:36:05 +0900 Subject: [Agda] Question on `unify` function in Reflection API In-Reply-To: References: Message-ID: Dear Ulf, Thank you so much for the reply here and on GitHub. (I created a new issue on GitHub: https://github.com/agda/agda/issues/4143) Chiaki Ishio 2019?10?16?(?) 23:03 Ulf Norell : > I get the same behaviour for both nat.agda and nat-param.agda (i.e. runTC > succeeds, but > leaves an unsolved meta for the proof). It might be worth filing an issue > on the bug tracker > with more specifics (agda version, what error are you seeing, etc). > > The main difference between unify and Emacs mode refine is that refine > works on the source > code level (so refining with plus_ is roughly equivalent to manually > replacing the hole with `plus ?` > and reloading), whereas unify is working with the internal representations > of the type checker. > > / Ulf > > On Fri, Oct 11, 2019 at 9:34 AM ???? wrote: > >> Hello all, >> >> I have a question on the `unify` function in Reflection API. >> I got two minimal examples of multi-step addition of natural numbers >> (nat.agda, nat-param.agda). >> >> In the first example (nat.agda), the goal of the fourth argument is >> dependent on the second argument, but I can unify the desired constructor. >> >> multi-step : Reduce* (E (V 0) (V 1)) (V 1) >> multi-step = trans* (E (V 0) (V 1)) >> {!!} -- 2nd arg >> (V 1) >> {!runTC!} -- 4th arg, runTC succeeds >> {!!} >> >> In another example (nat-param.agda), datatype definitions are >> parameterized, but those parameters don't have any real meanings. >> When I try the following code, `unify` function in Reflection API fails >> unless I fill up the second argument. >> >> multi-step : (v : Typ) ? Reduce* v (E (V 0) (V 1)) (V 1) -- we have a >> parameter `v` >> multi-step v = trans* (E (V 0) (V 1)) >> {!!} -- 2nd arg >> (V 1) >> {!runTC!} -- 4th arg, runTC fails >> {!!} >> >> I am not sure why this happens, and not sure of any difference between >> the `unify` function and the refine command in Emacs Mode. >> >> Any comments would be appreciated. >> >> Best, >> >> Chiaki Ishio >> chiaki.ishio at gmail.com >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -- Chiaki Ishio chiaki.ishio at gmail.com -------------- next part -------------- An HTML attachment was scrubbed... URL: From casperbp at gmail.com Sat Oct 19 12:25:10 2019 From: casperbp at gmail.com (Casper Bach Poulsen) Date: Sat, 19 Oct 2019 12:25:10 +0200 Subject: [Agda] PEPM 2020: DEADLINE EXTENSION to 25 Oct Message-ID: -- CALL FOR PAPERS -- ACM SIGPLAN Workshop on PARTIAL EVALUATION AND PROGRAM MANIPULATION (PEPM) 2020 =============================================================================== ************************* *** DEADLINE EXTENDED *** ************************* * [EXTENDED] Paper submission deadline : Friday 25th October 2019 (AoE) * [EXTENDED] Author notification : Monday 18th November 2019 (AoE) * Workshop : Monday 20th and Tuesday 21st January 2020 * Website : https://popl20.sigplan.org/home/pepm-2020 * Time : 20th - 21st January 2020 * Place : New Orleans, Louisiana, United States (co-located with POPL 2020) The ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM), which has a history going back to 1991 and has co-located with POPL every year since 2006, originates in the discoveries of practically useful automated techniques for evaluating programs with only partial input. Over the years, the scope of PEPM has expanded to include a variety of research areas centred around the theme of semantics-based program manipulation ? the systematic exploitation of treating programs not only as subject to black-box execution, but also as data structures that can be generated, analysed, and transformed while establishing or maintaining important semantic properties. Scope ----- In addition to the traditional PEPM topics (see below), PEPM 2020 welcomes submissions in new domains, in particular: * Semantics based and machine-learning based program synthesis and program optimization. * Modelling, analysis, and transformation techniques for distributed and concurrent protocols and programs, such as session types, linear types, and contract specifications. More generally, topics of interest for PEPM 2020 include, but are not limited to: * Program and model manipulation techniques such as: supercompilation, partial evaluation, fusion, on-the-fly program adaptation, active libraries, program inversion, slicing, symbolic execution, refactoring, decompilation, and obfuscation. * Techniques that treat programs/models as data objects including metaprogramming, generative programming, embedded domain-specific languages, program synthesis by sketching and inductive programming, staged computation, and model-driven program generation and transformation. * Program analysis techniques that are used to drive program/model manipulation such as: abstract interpretation, termination checking, binding-time analysis, constraint solving, type systems, automated testing and test case generation. * Application of the above techniques including case studies of program manipulation in real-world (industrial, open-source) projects and software development processes, descriptions of robust tools capable of effectively handling realistic applications, benchmarking. Examples of application domains include legacy program understanding and transformation, DSL implementations, visual languages and end-user programming, scientific computing, middleware frameworks and infrastructure needed for distributed and web-based applications, embedded and resource-limited computation, and security. This list of categories is not exhaustive, and we encourage submissions describing new theories and applications related to semantics-based program manipulation in general. If you have a question as to whether a potential submission is within the scope of the workshop, please contact the programme co-chairs, Casper Bach Poulsen (http://casperbp.net) and Zhenjiang Hu (http://sei.pku.edu.cn/~hu/). Submission categories and guidelines ------------------------------------ Two kinds of submissions will be accepted: Regular Research Papers and Short Papers. * Regular Research Papers should describe new results, and will be judged on originality, correctness, significance, and clarity. Regular research papers must not exceed 12 pages (excluding bibliography). * Short Papers may include tool demonstrations and presentations of exciting if not fully polished research, and of interesting academic, industrial, and open-source applications that are new or unfamiliar. Short papers must not exceed 6 pages (excluding bibliography). Both kinds of submissions should be typeset using the two-column ?sigplan? sub-format of the new ?acmart? format available at: http://sigplan.org/Resources/Author/ and submitted electronically via HotCRP: https://pepm20.hotcrp.com/ PEPM 2020 will employ lightweight double-blind reviewing according to the rules of POPL 2020. Quoting from POPL 2020?s call for papers: ?submitted papers must adhere to two rules: 1. author names and institutions must be omitted, and 2. references to authors? own related work should be in the third person (e.g., not ?We build on our previous work ...? but rather ?We build on the work of ...?). The purpose of this process is to help the PC and external reviewers come to an initial judgment about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult. In particular, important background references should not be omitted or anonymized. In addition, authors are free to disseminate their ideas or draft versions of their paper as usual. For example, authors may post drafts of their papers on the web or give talks on their research ideas.? See POPL 2020?s Submission and Reviewing FAQ page for more information: https://popl20.sigplan.org/track/POPL-2020-Research-Papers#Submission-and-Reviewing-FAQ Submissions are welcome from PC members (except the two co-chairs). Accepted papers will appear in formal proceedings published by ACM, and be included in the ACM Digital Library. Authors of short papers, however, can ask for their papers to be left out of the formal proceedings. At least one author of each accepted contribution must attend the workshop and present the work. In the case of tool demonstration papers, a live demonstration of the described tool is expected. Suggested topics, evaluation criteria, and writing guidelines for both research tool demonstration papers will be made available on the PEPM 2020 web site: https://popl20.sigplan.org/home/pepm-2020 Student participants with accepted papers can apply for a SIGPLAN PAC grant to help cover travel expenses and other support. PAC also offers other support, such as for child-care expenses during the meeting or for travel costs for companions of SIGPLAN members with physical disabilities, as well as for travel from locations outside of North America and Europe. For details on the PAC programme, see its web page: https://www.sigplan.org/PAC/ Important dates --------------- * Paper submission deadline : Friday 25th October 2019 (AoE) * Author notification : Monday 18th November 2019 (AoE) * Camera-ready version : Monday 25th November 2019 * Workshop : Monday 20th and Tuesday 21st January 2020 The proceedings are expected to be published 2 weeks pre-conference. AUTHORS TAKE NOTE: The official publication date is the date the proceedings are made available in the ACM Digital Library. This date may be up to two weeks prior to the first day of your conference. The official publication date affects the deadline for any patent filings related to published work. (For those rare conferences whose proceedings are published in the ACM Digital Library after the conference is over, the official publication date remains the first day of the conference.) Best paper award ---------------- PEPM 2020 continues the tradition of a Best Paper award. The winner will be announced at the workshop. Invited speakers ---------------- * Xinyu Feng (Nanjing University) * Nate Foster (Cornell University) Programme committee ------------------- * Andreas Abel (Chalmers U.) * Guillaume Allais (U. Strathclyde) * Nada Amin (Cambridge U.) * Casper Bach Poulsen (co-chair) (TU Delft) * Patrick Bahr (Copenhagen U.) * Aggelos Biboudis (EPFL) * Olivier Danvy (National U. Singapore) * ?lvaro Garc?a-P?rez (IMDEA) * Jeremy Gibbons (Oxford U.) * Robert Gl?ck (Copenhagen U.) * Torsten Grust (U. Tubingen) * Zhenjiang Hu (co-chair) (Peking U./NII) * Hideya Iwasaki (U. Electro-Communications) * Oleg Kiselyov (Tohoku U.) * Hedehiko Masuhara (Tokyo I. Technology) * Keisuke Nakano (Tohoku U.) * Bruno Oliveira (U. Hong Kong) * Jens Palsberg (UCLA) * Jo?o Saraiva (Minho U.) * Tom Schrijvers (KU Leuven) * Eijiro Sumii (Tohoku U.) * Walid Taha (Halmstad U.) * Nobuko Yoshida (Imperial C. London) -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Mon Oct 21 15:22:31 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Mon, 21 Oct 2019 15:22:31 +0200 Subject: [Agda] New blog post: Hack your type theory with rewrite rules Message-ID: Hi Agda folks, I have another blog post for you on extending Agda with rewrite rules, with no less than six examples of how they can be used. You can read it at https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments are welcome here on the mailing list as usual. Cheers, Jesper -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Mon Oct 21 16:20:19 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Mon, 21 Oct 2019 17:20:19 +0300 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: If you have proved the equality as in your 2nd example, is there any reason not to use REWRITE? My impression is that I should use REWRITE everywhere where I have proven a propositional equality so as to make it definitional. Nice blog post, and a good reference to a book on type theory. I was looking into a good introductory book that would help me understand agda a bit better. On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx wrote: > Hi Agda folks, > > I have another blog post for you on extending Agda with rewrite rules, > with no less than six examples of how they can be used. You can read it at > https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments > are welcome here on the mailing list as usual. > > Cheers, > Jesper > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Mon Oct 21 18:14:19 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Mon, 21 Oct 2019 18:14:19 +0200 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Hi Apostolis, Excellent question! Unfortunately, the answer is not an unqualified 'yes'. It is true that using such rewrite rules always preserves soundness of the theory, since rewrite rules are in a sense a limited form of equality reflection, and equality reflection is known to be consistent. However, other more syntactic properties such as confluence, termination, and subject reduction (aka type preservation) can still be broken. In our 2014 paper, I give one such example: the rewrite rules `(suc x) * y == (x * y) + y` and `x * (suc y) == x + (x * y)` are not confluent unless you also have associativity of + as a rewrite rule. It's not very straightforward, but by tricking Agda's constraint solver to solve equations in a particular order, you can exploit a non-confluence like this to break subject reduction. This manifests as a type error complaining two things should be equal even though they are according to the rules. I have actually been working on implementing a confluence checker for rewrite rules (which I'm planning to talk about in an upcoming post). If you want, you can try it out by installing the current master branch of Agda and enabling the --confluence-check flag. Cheers, Jesper On Mon, Oct 21, 2019 at 4:21 PM Apostolis Xekoukoulotakis < apostolis.xekoukoulotakis at gmail.com> wrote: > If you have proved the equality as in your 2nd example, is there any > reason not to use REWRITE? > My impression is that I should use REWRITE everywhere where I have proven > a propositional equality so as to make it definitional. > > Nice blog post, and a good reference to a book on type theory. I was > looking into a good introductory book that would help me understand agda a > bit better. > > On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx wrote: > >> Hi Agda folks, >> >> I have another blog post for you on extending Agda with rewrite rules, >> with no less than six examples of how they can be used. You can read it at >> https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments >> are welcome here on the mailing list as usual. >> >> Cheers, >> Jesper >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From jon at jonmsterling.com Mon Oct 21 21:35:43 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Mon, 21 Oct 2019 15:35:43 -0400 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Hi Jesper, I'm very pleased to hear that the confluence checker is coming along! Once it is in place, what kind of syntactic guarantees (relative to "pure Agda") can we expect to be available in the presence of custom rewrite rules? The main one I'm asking about is transitivity: if judgmental equality is transitive in plain Agda, then does one expect it to be transitive in Agda mod T, for T a set of rewrite rules that would accepted by the completed checker? If so, the rewriting facility sounds totally amazing and really useful. Maybe in the future we can just use Agda to prototype most new extensions to type theory, rather than writing our own implementations right away. Best, Jon On Mon, Oct 21, 2019, at 12:14 PM, Jesper Cockx wrote: > Hi Apostolis, > > Excellent question! Unfortunately, the answer is not an unqualified > 'yes'. It is true that using such rewrite rules always preserves > soundness of the theory, since rewrite rules are in a sense a limited > form of equality reflection, and equality reflection is known to be > consistent. > > However, other more syntactic properties such as confluence, > termination, and subject reduction (aka type preservation) can still be > broken. In our 2014 paper, I give one such example: the rewrite rules > `(suc x) * y == (x * y) + y` and `x * (suc y) == x + (x * y)` are not > confluent unless you also have associativity of + as a rewrite rule. > It's not very straightforward, but by tricking Agda's constraint solver > to solve equations in a particular order, you can exploit a > non-confluence like this to break subject reduction. This manifests as > a type error complaining two things should be equal even though they > are according to the rules. > > I have actually been working on implementing a confluence checker for > rewrite rules (which I'm planning to talk about in an upcoming post). > If you want, you can try it out by installing the current master branch > of Agda and enabling the --confluence-check flag. > > Cheers, > Jesper > > On Mon, Oct 21, 2019 at 4:21 PM Apostolis Xekoukoulotakis > wrote: > > If you have proved the equality as in your 2nd example, is there any reason not to use REWRITE? > > My impression is that I should use REWRITE everywhere where I have proven a propositional equality so as to make it definitional. > > > > Nice blog post, and a good reference to a book on type theory. I was looking into a good introductory book that would help me understand agda a bit better. > > > > On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx wrote: > >> Hi Agda folks, > >> > >> I have another blog post for you on extending Agda with rewrite rules, with no less than six examples of how they can be used. You can read it at https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments are welcome here on the mailing list as usual. > >> > >> Cheers, > >> Jesper > >> _______________________________________________ > >> Agda mailing list > >> Agda at lists.chalmers.se > >> https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From b.a.w.spitters at gmail.com Mon Oct 21 22:04:28 2019 From: b.a.w.spitters at gmail.com (Bas Spitters) Date: Mon, 21 Oct 2019 22:04:28 +0200 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: One development for such meta-theory is available for CoqMT. https://hal.archives-ouvertes.fr/hal-01664457 I wonder about the relation with the rewriting technology in Jesper's blog post. Bas On Mon, Oct 21, 2019 at 9:36 PM Jon Sterling wrote: > Hi Jesper, > > I'm very pleased to hear that the confluence checker is coming along! Once > it is in place, what kind of syntactic guarantees (relative to "pure Agda") > can we expect to be available in the presence of custom rewrite rules? > > The main one I'm asking about is transitivity: if judgmental equality is > transitive in plain Agda, then does one expect it to be transitive in Agda > mod T, for T a set of rewrite rules that would accepted by the completed > checker? If so, the rewriting facility sounds totally amazing and really > useful. > > Maybe in the future we can just use Agda to prototype most new extensions > to type theory, rather than writing our own implementations right away. > > > Best, > Jon > > > > On Mon, Oct 21, 2019, at 12:14 PM, Jesper Cockx wrote: > > Hi Apostolis, > > > > Excellent question! Unfortunately, the answer is not an unqualified > > 'yes'. It is true that using such rewrite rules always preserves > > soundness of the theory, since rewrite rules are in a sense a limited > > form of equality reflection, and equality reflection is known to be > > consistent. > > > > However, other more syntactic properties such as confluence, > > termination, and subject reduction (aka type preservation) can still be > > broken. In our 2014 paper, I give one such example: the rewrite rules > > `(suc x) * y == (x * y) + y` and `x * (suc y) == x + (x * y)` are not > > confluent unless you also have associativity of + as a rewrite rule. > > It's not very straightforward, but by tricking Agda's constraint solver > > to solve equations in a particular order, you can exploit a > > non-confluence like this to break subject reduction. This manifests as > > a type error complaining two things should be equal even though they > > are according to the rules. > > > > I have actually been working on implementing a confluence checker for > > rewrite rules (which I'm planning to talk about in an upcoming post). > > If you want, you can try it out by installing the current master branch > > of Agda and enabling the --confluence-check flag. > > > > Cheers, > > Jesper > > > > On Mon, Oct 21, 2019 at 4:21 PM Apostolis Xekoukoulotakis > > wrote: > > > If you have proved the equality as in your 2nd example, is there any > reason not to use REWRITE? > > > My impression is that I should use REWRITE everywhere where I have > proven a propositional equality so as to make it definitional. > > > > > > Nice blog post, and a good reference to a book on type theory. I was > looking into a good introductory book that would help me understand agda a > bit better. > > > > > > On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx > wrote: > > >> Hi Agda folks, > > >> > > >> I have another blog post for you on extending Agda with rewrite > rules, with no less than six examples of how they can be used. You can read > it at https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any > comments are welcome here on the mailing list as usual. > > >> > > >> Cheers, > > >> Jesper > > >> _______________________________________________ > > >> Agda mailing list > > >> Agda at lists.chalmers.se > > >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From frederic.blanqui at inria.fr Tue Oct 22 09:30:17 2019 From: frederic.blanqui at inria.fr (=?UTF-8?B?RnLDqWTDqXJpYyBCbGFucXVp?=) Date: Tue, 22 Oct 2019 09:30:17 +0200 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Dear all, CoqMT is not really Coq modulo rewriting but rather Coq modulo decision procedures like linear arithmetic, etc. Unfortunately, it is not developed anymore at the moment I think. For a proof assistant with builtin rewriting, I invite you to have a look at Dedukti, or rather its new interactive version, Lambdapi (future Dedukti v3), https://github.com/Deducteam/lambdapi. See its documentation on https://github.com/Deducteam/lambdapi/blob/master/doc/DOCUMENTATION.md . Lambdapi is still under development and misses a basic library but this will be fixed in the next months. So stay tuned! You can however have a look at some of the test files to see how it looks like. For instance, https://github.com/Deducteam/lambdapi/blob/master/tests/OK/rewrite.lp , https://github.com/Deducteam/lambdapi/blob/master/tests/OK/natproofs.lp or https://github.com/Deducteam/lambdapi/blob/master/tests/OK/245.lp . Some new VSCode interface has been developed and should be released in the next months (there are also simple interfaces with vim and emacs). Its current set of tactics is very basic but should be improved in the next months. Two important tactics are much more advanced though: a rewriting tactic following the SSReflect syntax and semantics, and a tactic for calling external automated theorem/SAT/SMT provers through the Why3 library (available in the next days). Dedukti implements the lambda-Pi-calculus modulo user-defined rewriting. See below for some references. In particular, adding rewriting to dependent types allows to easily encode many other systems: HOL, Matita, Coq, Isabelle or Agda (work in progress). Dedukti includes a builtin subject-reduction checker (a new more powerful algorithm based on Knuth-Bendix completion will be released in the next months). For confluence, you can call external confluence checkers like CSI^ho or other confluence provers participating to the competition on confluence (http://project-coco.uibk.ac.at/). Idem for termination using an extension to dependent types of the format for termination problems of the termination competition (http://termination-portal.org/wiki/Termination_Competition). See https://github.com/Deducteam/lambdapi/blob/master/doc/sections/options.md for more details. In particular, Guillaume Genestier developed a termination checker prototype for Dedukti that could be extended to Agda. Some references (we could add more): - Dedukti: a Logical Framework based on the lambda-Pi-Calculus Modulo Theory, A. Assaf, G. Burel, R. Cauderlier, D. Delahaye, G. Dowek, C. Dubois, F. Gilbert, P. Halmagrand, O. Hermant, and R. Saillard, http://www.lsv.fr/~dowek/Publi/expressing.pdf , submitted. - Dependency Pairs Termination in Dependent Type Theory Modulo Rewriting, http://dx.doi.org/10.4230/LIPIcs.FSCD.2019.9 , 2019. - Definitions by rewriting in the Calculus of Constructions, https://doi.org/10.1017/S0960129504004426 , 2005. - Dependent type theory with first-order parameterized data types and well-founded recursion, D. Wahlstedt, http://www.cse.chalmers.se/alumni/davidw/wdt_phd_printed_version.pdf , 2007. - Type checking in the Lambda-Pi-calculus modulo: theory and practice, PhD thesis, R. Saillard, https://pastel.archives-ouvertes.fr/tel-01299180 , 2015. - Type theory and rewriting, PhD thesis, http://hal.inria.fr/inria-00105525 , 2001. - Modularity of strong normalization in the algebraic-lambda-cube, F. Barbanera and M. Fernandez and H. Geuvers, http://journals.cambridge.org/article_S095679689700289X , 1997. Le 21/10/2019 ? 22:04, Bas Spitters a ?crit?: > One development for such meta-theory is available for CoqMT. > https://hal.archives-ouvertes.fr/hal-01664457 > I wonder about the relation with the rewriting technology in Jesper's > blog post. > > Bas > > On Mon, Oct 21, 2019 at 9:36 PM Jon Sterling > wrote: > > Hi Jesper, > > I'm very pleased to hear that the confluence checker is coming > along! Once it is in place, what kind of syntactic guarantees > (relative to "pure Agda") can we expect to be available in the > presence of custom rewrite rules? > > The main one I'm asking about is transitivity: if judgmental > equality is transitive in plain Agda, then does one expect it to > be transitive in Agda mod T, for T a set of rewrite rules that > would accepted by the completed checker? If so, the rewriting > facility sounds totally amazing and really useful. > > Maybe in the future we can just use Agda to prototype most new > extensions to type theory, rather than writing our own > implementations right away. > > > Best, > Jon > > > > On Mon, Oct 21, 2019, at 12:14 PM, Jesper Cockx wrote: > > Hi Apostolis, > > > > Excellent question! Unfortunately, the answer is not an unqualified > > 'yes'. It is true that using such rewrite rules always preserves > > soundness of the theory, since rewrite rules are in a sense a > limited > > form of equality reflection, and equality reflection is known to be > > consistent. > > > > However, other more syntactic properties such as confluence, > > termination, and subject reduction (aka type preservation) can > still be > > broken. In our 2014 paper, I give one such example: the rewrite > rules > > `(suc x) * y == (x * y) + y` and `x * (suc y) == x + (x * y)` > are not > > confluent unless you also have associativity of + as a rewrite > rule. > > It's not very straightforward, but by tricking Agda's constraint > solver > > to solve equations in a particular order, you can exploit a > > non-confluence like this to break subject reduction. This > manifests as > > a type error complaining two things should be equal even though > they > > are according to the rules. > > > > I have actually been working on implementing a confluence > checker for > > rewrite rules (which I'm planning to talk about in an upcoming > post). > > If you want, you can try it out by installing the current master > branch > > of Agda and enabling the --confluence-check flag. > > > > Cheers, > > Jesper > > > > On Mon, Oct 21, 2019 at 4:21 PM Apostolis Xekoukoulotakis > > > wrote: > > > If you have proved the equality as in your 2nd example, is > there any reason not to use REWRITE? > > > My impression is that I should use REWRITE everywhere where I > have proven a propositional equality so as to make it definitional. > > > > > > Nice blog post, and a good reference to a book on type theory. > I was looking into a good introductory book that would help me > understand agda a bit better. > > > > > > On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx > > wrote: > > >> Hi Agda folks, > > >> > > >> I have another blog post for you on extending Agda with > rewrite rules, with no less than six examples of how they can be > used. You can read it at > https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any > comments are welcome here on the mailing list as usual. > > >> > > >> Cheers, > > >> Jesper > > >>? _______________________________________________ > > >>? Agda mailing list > > >> Agda at lists.chalmers.se > > >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From xu at math.lmu.de Wed Oct 23 11:26:27 2019 From: xu at math.lmu.de (Chuangjie Xu) Date: Wed, 23 Oct 2019 11:26:27 +0200 Subject: [Agda] Workshop on Foundations and Applications of Univalent Mathematics, 18-20 December 2019, Herrsching Message-ID: <08DD6D66-8D15-43E4-803F-3B5FFA38D178@math.lmu.de> ANNOUNCEMENT AND CALL FOR PARTICIPATION Foundations and Applications of Univalent Mathematics 18-20 December 2019, Herrsching (near Munich), Germany http://cj-xu.github.io/faum/ This workshop focuses on both the foundation of univalent mathematics and the applications of the univalent innovations. INVITED SPEAKERS ---------------- * Benedikt Ahrens (University of Birmingham) * Thorsten Altenkirch (University of Nottingham) * Andrej Bauer (University of Ljubljana) * Ulrik Buchholtz (Technischen Universit?t Darmstadt) * Thierry Coquand (University of Gothenburg) * Peter Dybjer (Chalmers University of Technology) * Mart?n Escard? (University of Birmingham) * Valery Isaev (JetBrains Research) * Nicolai Kraus (University of Birmingham) * Fredrik Nordvall Forsberg (University of Strathclyde) * Paige Randall North (Ohio State University) * Anders M?rtberg (Stockholm University) * Iosif Petrakis (Ludwig-Maximilians-Universit?t M?nchen) * Bas Spitters (Aarhus University) * Thomas Streicher (TU Darmstadt) * Benno van den Berg (Universiteit van Amsterdam) * Andrea Vezzosi (IT University of Copenhagen) The programme will be updated in the workshop's webpage later. REGISTRATION ------------ There is no registration fee. To aid planning, please contact Chuangjie Xu by writing to xu at math.lmu.de for registration. This workshop is supported by the LMUexcellent Junior Researcher Fund. Hope to see you in Herrsching in December! Best regards, Chuangjie Xu Mathematisches Institut Ludwig-Maximilians-Universit?t M?nchen Theresienstr. 39 D-80333 M?nchen -------------- next part -------------- An HTML attachment was scrubbed... URL: From marko at dimjasevic.net Wed Oct 23 14:46:44 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Wed, 23 Oct 2019 14:46:44 +0200 Subject: [Agda] Searching for a state machine library Message-ID: Dear Agda community, Is anyone aware of an Agda library for finite state machines that has capabilities like Control.ST in Idris? The Idris library is described at: http://docs.idris-lang.org/en/latest/st/state.html At the link, the library is described like this: "The Control.ST library provides facilities for creating, reading, writing and destroying state in Idris functions, and tracking changes of state in a function?s type. It is based around the concept of resources, which are, essentially, mutable variables, and a dependent type, STrans which tracks how those resources change when a function runs." The main idea is the STrans type constructor with this signature: STrans : (m : Type -> Type) -> (resultType : Type) -> (in_res : Resources) -> (out_res : resultType -> Resources) -> Type (This is written in Idris, but I am sure you can easily see how it would look like in Agda.) If you know of such a library in Agda, I would appreciate a pointer to it! -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID: 056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From Jesper at sikanda.be Thu Oct 24 10:23:47 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Thu, 24 Oct 2019 10:23:47 +0200 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Hi Jon, The confluence checker is currently only checking local confluence, so if we want to get the kind of syntactic guarantees you are talking about we need to either make the confluence check stricter or also check termination of rewrite rules. Checking termination would of course also be useful to prevent typechecking from looping. I'm hoping that in the future we can adapt Dedukti's SizeChangeTool (https://github.com/Deducteam/SizeChangeTool) by Guillaume Genestier to also work for Agda's rewrite rules. I fully agree with the sentiment that we should be able to prototype new extensions to type theory without implementing a new language from scratch. I have many ideas beyond rewrite rules that would make this more feasible, e.g. having custom eta rules would be very useful I think. Best regards, Jesper On Mon, Oct 21, 2019 at 9:36 PM Jon Sterling wrote: > Hi Jesper, > > I'm very pleased to hear that the confluence checker is coming along! Once > it is in place, what kind of syntactic guarantees (relative to "pure Agda") > can we expect to be available in the presence of custom rewrite rules? > > The main one I'm asking about is transitivity: if judgmental equality is > transitive in plain Agda, then does one expect it to be transitive in Agda > mod T, for T a set of rewrite rules that would accepted by the completed > checker? If so, the rewriting facility sounds totally amazing and really > useful. > > Maybe in the future we can just use Agda to prototype most new extensions > to type theory, rather than writing our own implementations right away. > > > Best, > Jon > > > > On Mon, Oct 21, 2019, at 12:14 PM, Jesper Cockx wrote: > > Hi Apostolis, > > > > Excellent question! Unfortunately, the answer is not an unqualified > > 'yes'. It is true that using such rewrite rules always preserves > > soundness of the theory, since rewrite rules are in a sense a limited > > form of equality reflection, and equality reflection is known to be > > consistent. > > > > However, other more syntactic properties such as confluence, > > termination, and subject reduction (aka type preservation) can still be > > broken. In our 2014 paper, I give one such example: the rewrite rules > > `(suc x) * y == (x * y) + y` and `x * (suc y) == x + (x * y)` are not > > confluent unless you also have associativity of + as a rewrite rule. > > It's not very straightforward, but by tricking Agda's constraint solver > > to solve equations in a particular order, you can exploit a > > non-confluence like this to break subject reduction. This manifests as > > a type error complaining two things should be equal even though they > > are according to the rules. > > > > I have actually been working on implementing a confluence checker for > > rewrite rules (which I'm planning to talk about in an upcoming post). > > If you want, you can try it out by installing the current master branch > > of Agda and enabling the --confluence-check flag. > > > > Cheers, > > Jesper > > > > On Mon, Oct 21, 2019 at 4:21 PM Apostolis Xekoukoulotakis > > wrote: > > > If you have proved the equality as in your 2nd example, is there any > reason not to use REWRITE? > > > My impression is that I should use REWRITE everywhere where I have > proven a propositional equality so as to make it definitional. > > > > > > Nice blog post, and a good reference to a book on type theory. I was > looking into a good introductory book that would help me understand agda a > bit better. > > > > > > On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx > wrote: > > >> Hi Agda folks, > > >> > > >> I have another blog post for you on extending Agda with rewrite > rules, with no less than six examples of how they can be used. You can read > it at https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any > comments are welcome here on the mailing list as usual. > > >> > > >> Cheers, > > >> Jesper > > >> _______________________________________________ > > >> Agda mailing list > > >> Agda at lists.chalmers.se > > >> https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From jon at jonmsterling.com Thu Oct 24 14:41:16 2019 From: jon at jonmsterling.com (Jon Sterling) Date: Thu, 24 Oct 2019 08:41:16 -0400 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Local confluence is a great start! Thanks. Best, Jon On Thu, Oct 24, 2019, at 4:23 AM, Jesper Cockx wrote: > Hi Jon, > > The confluence checker is currently only checking local confluence, so > if we want to get the kind of syntactic guarantees you are talking > about we need to either make the confluence check stricter or also > check termination of rewrite rules. Checking termination would of > course also be useful to prevent typechecking from looping. I'm hoping > that in the future we can adapt Dedukti's SizeChangeTool > (https://github.com/Deducteam/SizeChangeTool) by Guillaume Genestier to > also work for Agda's rewrite rules. > > I fully agree with the sentiment that we should be able to prototype > new extensions to type theory without implementing a new language from > scratch. I have many ideas beyond rewrite rules that would make this > more feasible, e.g. having custom eta rules would be very useful I > think. > > Best regards, > Jesper > > On Mon, Oct 21, 2019 at 9:36 PM Jon Sterling wrote: > > Hi Jesper, > > > > I'm very pleased to hear that the confluence checker is coming along! Once it is in place, what kind of syntactic guarantees (relative to "pure Agda") can we expect to be available in the presence of custom rewrite rules? > > > > The main one I'm asking about is transitivity: if judgmental equality is transitive in plain Agda, then does one expect it to be transitive in Agda mod T, for T a set of rewrite rules that would accepted by the completed checker? If so, the rewriting facility sounds totally amazing and really useful. > > > > Maybe in the future we can just use Agda to prototype most new extensions to type theory, rather than writing our own implementations right away. > > > > > > Best, > > Jon > > > > > > > > On Mon, Oct 21, 2019, at 12:14 PM, Jesper Cockx wrote: > > > Hi Apostolis, > > > > > > Excellent question! Unfortunately, the answer is not an unqualified > > > 'yes'. It is true that using such rewrite rules always preserves > > > soundness of the theory, since rewrite rules are in a sense a limited > > > form of equality reflection, and equality reflection is known to be > > > consistent. > > > > > > However, other more syntactic properties such as confluence, > > > termination, and subject reduction (aka type preservation) can still be > > > broken. In our 2014 paper, I give one such example: the rewrite rules > > > `(suc x) * y == (x * y) + y` and `x * (suc y) == x + (x * y)` are not > > > confluent unless you also have associativity of + as a rewrite rule. > > > It's not very straightforward, but by tricking Agda's constraint solver > > > to solve equations in a particular order, you can exploit a > > > non-confluence like this to break subject reduction. This manifests as > > > a type error complaining two things should be equal even though they > > > are according to the rules. > > > > > > I have actually been working on implementing a confluence checker for > > > rewrite rules (which I'm planning to talk about in an upcoming post). > > > If you want, you can try it out by installing the current master branch > > > of Agda and enabling the --confluence-check flag. > > > > > > Cheers, > > > Jesper > > > > > > On Mon, Oct 21, 2019 at 4:21 PM Apostolis Xekoukoulotakis > > > wrote: > > > > If you have proved the equality as in your 2nd example, is there any reason not to use REWRITE? > > > > My impression is that I should use REWRITE everywhere where I have proven a propositional equality so as to make it definitional. > > > > > > > > Nice blog post, and a good reference to a book on type theory. I was looking into a good introductory book that would help me understand agda a bit better. > > > > > > > > On Mon, Oct 21, 2019 at 4:22 PM Jesper Cockx wrote: > > > >> Hi Agda folks, > > > >> > > > >> I have another blog post for you on extending Agda with rewrite rules, with no less than six examples of how they can be used. You can read it at https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments are welcome here on the mailing list as usual. > > > >> > > > >> Cheers, > > > >> Jesper > > > >> _______________________________________________ > > > >> Agda mailing list > > > >> Agda at lists.chalmers.se > > > >> https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda From ichor88 at gmail.com Fri Oct 25 09:27:16 2019 From: ichor88 at gmail.com (=?UTF-8?B?SMOla29u?= Robbestad Gylterud) Date: Fri, 25 Oct 2019 09:27:16 +0200 Subject: [Agda] PhD position in type theory at the University of Bergen Message-ID: <20191025092716.a6778bbfa43dde229962035c@gmail.com> Dear all, There is a PhD position in type theory (fully paid, 4 years, 25% teaching) available at the Department of Informatics, University of Bergen, Norway. Possible directions include homotopy type theory, applications of type theory to computer science or computerised formalisation of mathematics. Details can be found on the link below. Notice the short application deadline (November 15th 2019). If you have any questions, you can contact H?kon R. Gylterud, hakon.gylterud at uib.no. https://www.jobbnorge.no/en/available-jobs/job/177230/phd-position-in-informatics-type-theory Best regards, ?H?kon R. Gylterud From mechvel at scico.botik.ru Mon Oct 28 14:29:22 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 28 Oct 2019 16:29:22 +0300 Subject: [Agda] missed termination failure Message-ID: <2014e498128fcd85b6cb96aaa0cd92f7@scico.botik.ru> Dear Agda developers, I wonder of whether the attached program presents a bug in the type checker of 2.6.0.1. The program is small. Its last line has [y] = [y] -- DEBUG instead of [y] = [ y ] The second version is type-checked fast. The first version probably needs a report like "Termination check failed", but it hangs for a very long time. Regards, ------ Sergei -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: M.agda URL: From icfp.publicity at googlemail.com Wed Oct 30 14:48:57 2019 From: icfp.publicity at googlemail.com (Sam Tobin-Hochstadt) Date: Wed, 30 Oct 2019 09:48:57 -0400 Subject: [Agda] Call for Workshop Proposals: ICFP 2020 Message-ID: <5db994c972065_2a3d2af7799bc5bc163d@homer.mail> CALL FOR WORKSHOP AND CO-LOCATED EVENT PROPOSALS ICFP 2020 25th ACM SIGPLAN International Conference on Functional Programming August 23 - 28, 2020 Jersey City, NJ, US https://icfp19.sigplan.org/ The 25th ACM SIGPLAN International Conference on Functional Programming will be held in Jersey City, New Jersey on August 23-28, 2020. ICFP provides a forum for researchers and developers to hear about the latest work on the design, implementations, principles, and uses of functional programming. Proposals are invited for workshops (and other co-located events, such as symposiums) to be affiliated with ICFP 2020 and sponsored by SIGPLAN. These events should be less formal and more focused than ICFP itself, include sessions that enable interaction among the attendees, and foster the exchange of new ideas. The preference is for one-day events, but other schedules can also be considered. The workshops are scheduled to occur on August 23rd (the day before ICFP) and 27-28th of August (the two days after ICFP). ---------------------------------------------------------------------- Submission details Deadline for submission: November 15, 2019 Notification of acceptance: December 13, 2019 Prospective organizers of workshops or other co-located events are invited to submit a completed workshop proposal form in plain text format to the ICFP 2020 workshop co-chairs (Jennifer Hackett and Leonidas Lampropoulos) via email to icfp-workshops-2020 at googlegroups.com by November 15, 2019. (For proposals of co-located events other than workshops, please fill in the workshop proposal form and just leave blank any sections that do not apply.) Please note that this is a firm deadline. Organizers will be notified if their event proposal is accepted by December 13, 2019, and if successful, depending on the event, they will be asked to produce a final report after the event has taken place that is suitable for publication in SIGPLAN Notices. The proposal form is available at: http://www.icfpconference.org/icfp2020-files/icfp20-workshops-form.txt Further information about SIGPLAN sponsorship is available at: http://www.sigplan.org/Resources/Proposals/Sponsored/ ---------------------------------------------------------------------- Selection committee The proposals will be evaluated by a committee comprising the following members of the ICFP 2020 organizing committee, together with the members of the SIGPLAN executive committee. Workshop Co-Chair: Jennifer Hackett (University of Nottingham) Workshop Co-Chair: Leonidas Lampropoulos (University of Maryland) General Chair: Stephanie Weirich (University of Pennsylvania) Program Chair: Adam Chlipala (MIT) ---------------------------------------------------------------------- Further information Any queries should be addressed to the workshop co-chairs (Jennifer Hackett and Leonidas Lampropoulos), via email to icfp-workshops-2020 at googlegroups.com. From Jesper at sikanda.be Wed Oct 30 17:58:44 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 30 Oct 2019 17:58:44 +0100 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Hello again, The second part of my blog series on rewrite rules in Agda is now online: https://jesper.sikanda.be/posts/rewriting-type-theory.html. This time I go into the nitty-gritty details of how rewrite rules work and how they interact with other features of Agda. Comments are very welcome as usual! -- Jesper On Mon, Oct 21, 2019 at 3:22 PM Jesper Cockx wrote: > Hi Agda folks, > > I have another blog post for you on extending Agda with rewrite rules, > with no less than six examples of how they can be used. You can read it at > https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments > are welcome here on the mailing list as usual. > > Cheers, > Jesper > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Wed Oct 30 21:58:21 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Wed, 30 Oct 2019 23:58:21 +0300 Subject: [Agda] missed termination failure In-Reply-To: <2014e498128fcd85b6cb96aaa0cd92f7@scico.botik.ru> References: <2014e498128fcd85b6cb96aaa0cd92f7@scico.botik.ru> Message-ID: <5dccc0e89b852d4e7e8331c76f1964fb@scico.botik.ru> I have an impression that the attached M.agda has been deleted by some filter, due to a problem with UTF symbols. (?) So I attach now M.agda.zip. -- SM On 2019-10-28 16:29, mechvel at scico.botik.ru wrote: > Dear Agda developers, > > I wonder of whether the attached program presents a bug in the type > checker of 2.6.0.1. > The program is small. > Its last line has > [y] = [y] -- DEBUG > instead of [y] = [ y ] > > The second version is type-checked fast. > The first version probably needs a report like "Termination check > failed", > but it hangs for a very long time. > > Regards, > > ------ > Sergei > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- A non-text attachment was scrubbed... Name: M.agda.zip Type: application/zip Size: 756 bytes Desc: not available URL: From jac.karwowski at gmail.com Thu Oct 31 01:59:18 2019 From: jac.karwowski at gmail.com (Jacek Karwowski) Date: Wed, 30 Oct 2019 20:59:18 -0400 Subject: [Agda] Termination checker on commutative functions Message-ID: Hi, I'm trying to write a commutative function over some type, and not repeat the code in the process. The toy example is as follows: ``` module _ where open import Data.Nat data Int : {i : Size} -> Set where Pos : (x : ?) -> Int Neg : (x : ?) -> Int _?_ : Int -> Int -> Int Pos x ? Pos y = Pos (x + y) Neg x ? Neg y = Neg (x + y) Pos x ? Neg zero = Pos x Pos zero ? Neg y = Neg y Pos (suc x) ? Neg (suc y) = (Pos x) ? (Neg y) --- problematic call Neg x ? Pos y = (Pos y) ? (Neg x) ``` In the example above, termination checker complains about the last call, since it is not a structural recursion. (Of course, real types can (and do) have more than two constructors, the constructors are recursive, etc.) The naive, manual way I see would be to introduce an explicit order on the constructors by some external function, and then call ? passing this parameter over: ``` ord : Int -> ? ord (Pos _) = 0 ord (Neg _) = 1 _?_ : {s : ?} -> (x : Int) -> {s ? ord x} -> Int -> Int Pos x ? Pos y = Pos (x + y) Neg x ? Neg y = Neg (x + y) Pos x ? Neg zero = Pos x Pos zero ? Neg y = Neg y Pos (suc x) ? Neg (suc y) = _?_ {zero} (Pos x) {refl} (Neg y) --- problematic call _?_ {suc zero} (Neg x) (Pos y) = _?_ {zero} (Pos y) {refl} (Neg x) ``` but this ends up being very ugly and hard to read. What is the idiomatic way of handling these types of situations, introducing as little code overhead as possible? Thanks, Jacek -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Thu Oct 31 10:03:30 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Thu, 31 Oct 2019 10:03:30 +0100 Subject: [Agda] Termination checker on commutative functions In-Reply-To: References: Message-ID: Hi Jacek, The easiest solution here would be to first define a helper function for subtraction on `Nat`, and then use it to deal with the two symmetric cases: ``` module _ where open import Agda.Builtin.Nat data Int : Set where Pos : (x : Nat) ? Int Neg : (x : Nat) ? Int _?Nat_ : Nat ? Nat ? Int x ?Nat zero = Pos x zero ?Nat y = Neg y (suc x) ?Nat (suc y) = x ?Nat y _?_ : Int ? Int ? Int Pos x ? Pos y = Pos (x + y) Neg x ? Neg y = Neg (x + y) Pos x ? Neg y = x ?Nat y Neg x ? Pos y = y ?Nat x ``` -- Jesper On Thu, Oct 31, 2019 at 2:00 AM Jacek Karwowski wrote: > Hi, > > I'm trying to write a commutative function over some type, and not repeat > the code in the process. > > The toy example is as follows: > ``` > module _ where > > open import Data.Nat > > data Int : {i : Size} -> Set where > Pos : (x : ?) -> Int > Neg : (x : ?) -> Int > > _?_ : Int -> Int -> Int > Pos x ? Pos y = Pos (x + y) > Neg x ? Neg y = Neg (x + y) > Pos x ? Neg zero = Pos x > Pos zero ? Neg y = Neg y > Pos (suc x) ? Neg (suc y) = (Pos x) ? (Neg y) > --- problematic call > Neg x ? Pos y = (Pos y) ? (Neg x) > ``` > In the example above, termination checker complains about the last call, > since it is not a structural recursion. > > (Of course, real types can (and do) have more than two constructors, the > constructors are recursive, etc.) > > The naive, manual way I see would be to introduce an explicit order on the > constructors by some external function, and then call ? passing this > parameter over: > > ``` > ord : Int -> ? > ord (Pos _) = 0 > ord (Neg _) = 1 > > _?_ : {s : ?} -> (x : Int) -> {s ? ord x} -> Int -> Int > Pos x ? Pos y = Pos (x + y) > Neg x ? Neg y = Neg (x + y) > Pos x ? Neg zero = Pos x > Pos zero ? Neg y = Neg y > Pos (suc x) ? Neg (suc y) = _?_ {zero} (Pos x) {refl} (Neg y) > --- problematic call > _?_ {suc zero} (Neg x) (Pos y) = _?_ {zero} (Pos y) {refl} (Neg x) > ``` > but this ends up being very ugly and hard to read. > > What is the idiomatic way of handling these types of situations, > introducing as little code overhead as possible? > > Thanks, > Jacek > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From yotamdvir at mail.tau.ac.il Fri Nov 1 10:17:17 2019 From: yotamdvir at mail.tau.ac.il (Yotam Dvir) Date: Fri, 1 Nov 2019 11:17:17 +0200 Subject: [Agda] Undocumented (Recursive?) Positivity Checking In-Reply-To: <4e714ca5-367e-cad8-564b-a7e9f528137d@cse.gu.se> References: <6FA39BB2-DBB5-4693-8B41-EE876BA7C4D3@mail.tau.ac.il> <4e714ca5-367e-cad8-564b-a7e9f528137d@cse.gu.se> Message-ID: Thanks! Where can I find more information about these command-line options that don?t appear in the documentation (like -vtc)? > On 15 Oct 2019, at 16:36, Nils Anders Danielsson wrote: > > On 15/10/2019 14.11, Nils Anders Danielsson wrote: >> $ agda -vtc.polarity:10 Test.agda >> Checking Test ([?]/Test.agda). >> Polarity of Test.List: [*, +] >> Polarity of Test.List.[]: [*, *] >> Polarity of Test.List._?_: [*, *] >> Polarity of Test._?_-0: [*, *, *] >> Polarity of Test._?_-1: [*, *, *] > > This answer may have been somewhat misleading. As far as I recall the > polarities are not used by the positivity checker. I think the following > information might be more relevant to your question: > > $ agda -vtc.pos:10 --ignore-interfaces Test.agda | grep "args of List" > checking args of List > args of List = [-[_]->, -[g+]->] > > -- > /NAD From nad at cse.gu.se Fri Nov 1 14:28:25 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Fri, 1 Nov 2019 14:28:25 +0100 Subject: [Agda] Undocumented (Recursive?) Positivity Checking In-Reply-To: References: <6FA39BB2-DBB5-4693-8B41-EE876BA7C4D3@mail.tau.ac.il> <4e714ca5-367e-cad8-564b-a7e9f528137d@cse.gu.se> Message-ID: <87c5532e-a1b9-2ed0-4b11-41a0599591fd@cse.gu.se> On 01/11/2019 10.17, Yotam Dvir wrote: > Thanks! Where can I find more information about these command-line > options that don?t appear in the documentation (like -vtc)? In the source code. They are mainly intended to be used by developers. -- /NAD From maxsnew at gmail.com Fri Nov 1 16:00:53 2019 From: maxsnew at gmail.com (Max New) Date: Fri, 1 Nov 2019 11:00:53 -0400 Subject: [Agda] MSFP 2020 - First Call for Papers Message-ID: Eighth Workshop on MATHEMATICALLY STRUCTURED FUNCTIONAL PROGRAMMING Saturday 25th April 2020, Dublin, Ireland A satellite workshop of ETAPS 2020 https://msfp-workshop.github.io/msfp2020/ ** Deadline: 9th January (abstract), 16th January (paper) ** The eighth workshop on Mathematically Structured Functional Programming is devoted to the derivation of functionality from structure. It is a celebration of the direct impact of Theoretical Computer Science on programs as we write them today. Modern programming languages, and in particular functional languages, support the direct expression of mathematical structures, equipping programmers with tools of remarkable power and abstraction. Where would Haskell be without monads? Functional reactive programming without temporal logic? Call-by-push-value without adjunctions? The list goes on. This workshop is a forum for researchers who seek to reflect mathematical phenomena in data and control. The first MSFP workshop was held in Kuressaare, Estonia, in July 2006, affiliated with MPC 2006 and AMAST 2006. The second MSFP workshop was held in Reykjavik, Iceland as part of ICALP 2008. The third MSFP workshop was held in Baltimore, USA, as part of ICFP 2010. The fourth workshop was held in Tallinn, Estonia, as part of ETAPS 2012. The fifth workshop was held in Grenoble, France, as part of ETAPS 2014. The sixth MSFP Workshop was held in April 2016, in Eindhoven, Netherlands, as part of ETAPS 2016. The seventh MSFP Workshop was held in July 2018, in Oxford, UK, as part of FLoC 2018. Important Dates: ================ Abstract deadline: 9th January (Thursday) Paper deadline: 16th January (Thursday) Notification: 27th February (Thursday) Final version: 26th March (Thursday) Workshop: 25th April (Saturday) Invited Speakers: ================= - Pierre-Marie P?drot, Inria Rennes-Bretagne-Atlantique, France - Second invited speaker TBC Program Committee: ================== Stephanie Balzer - CMU, USA Kwanghoon Choi - Chonnam, South Korea Ralf Hinze - Kaiserslautern, Germany Marie Kerjean - Inria Nantes, France Sam Lindley - Edinburgh and Imperial, UK (co-chair) Max New - Northeastern, USA (co-chair) Fredrik Nordvall-Forsberg - Strathclyde, UK Alberto Pardo - Montevideo, Uruguay Exequiel Rivas Gadda - Inria Paris, France Claudio Russo - DFINITY, UK Tarmo Uustalu - Reykjavik, Iceland Nicolas Wu - Imperial, UK Maaike Zwart - Oxford, UK Submission: =========== Submissions are welcomed on, but by no means restricted to, topics such as: structured effectful computation structured recursion structured corecursion structured tree and graph operations structured syntax with variable binding structured datatype-genericity structured search structured representations of functions structured quantum computation structure directed optimizations structured types structure derived from programs and data Please contact the programme chairs Sam Lindley (Sam.Lindley at ed.ac.uk) and Max New (maxnew at ccs.neu.edu) if you have any questions about the scope of the workshop. We accept two categories of submission: full papers of no more than 15 pages that will appear in the proceedings, and extended abstracts of no more than 2 pages that we will post on the website, but which do not constitute formal publications and will not appear in the proceedings. References and appendices are not included in page limits. Appendices may not be read by reviewers. Submissions must report previously unpublished work and not be submitted concurrently to another conference with refereed proceedings. Accepted papers must be presented at the workshop by one of the authors. The proceedings will be published under the auspices of EPTCS with a Creative Commons license. A short abstract should be submitted a week in advance of the paper deadline (for both full paper and extended abstract submissions). We are using EasyChair to manage submissions. To submit a paper, use this link: https://easychair.org/conferences/?conf=msfp2020 -------------- next part -------------- An HTML attachment was scrubbed... URL: From guillaume.brunerie at gmail.com Fri Nov 1 16:02:19 2019 From: guillaume.brunerie at gmail.com (Guillaume Brunerie) Date: Fri, 1 Nov 2019 16:02:19 +0100 Subject: [Agda] missed termination failure In-Reply-To: <5dccc0e89b852d4e7e8331c76f1964fb@scico.botik.ru> References: <2014e498128fcd85b6cb96aaa0cd92f7@scico.botik.ru> <5dccc0e89b852d4e7e8331c76f1964fb@scico.botik.ru> Message-ID: Hi Sergei, This does look like a bug. I simplified the code and reported it at https://github.com/agda/agda/issues/4165) Best regards, Guillaume Den ons 30 okt. 2019 kl 21:58 skrev : > > I have an impression that the attached M.agda has been deleted by some > filter, > due to a problem with UTF symbols. > (?) > > So I attach now M.agda.zip. > > -- > SM > > > On 2019-10-28 16:29, mechvel at scico.botik.ru wrote: > > Dear Agda developers, > > > > I wonder of whether the attached program presents a bug in the type > > checker of 2.6.0.1. > > The program is small. > > Its last line has > > [y] = [y] -- DEBUG > > instead of [y] = [ y ] > > > > The second version is type-checked fast. > > The first version probably needs a report like "Termination check > > failed", > > but it hangs for a very long time. > > > > Regards, > > > > ------ > > Sergei > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From Graham.Hutton at nottingham.ac.uk Mon Nov 4 07:51:04 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Mon, 4 Nov 2019 06:51:04 +0000 Subject: [Agda] Journal of Functional Programming - Call for PhD Abstracts Message-ID: ============================================================ CALL FOR PHD ABSTRACTS Journal of Functional Programming Deadline: 30th November 2019 http://tinyurl.com/jfp-phd-abstracts ============================================================ PREAMBLE: Many students complete PhDs in functional programming each year. As a service to the community, twice per year the Journal of Functional Programming publishes the abstracts from PhD dissertations completed during the previous year. The abstracts are made freely available on the JFP website, i.e. not behind any paywall. They do not require any transfer of copyright, merely a license from the author. A dissertation is eligible for inclusion if parts of it have or could have appeared in JFP, that is, if it is in the general area of functional programming. The abstracts are not reviewed. Please submit dissertation abstracts according to the instructions below. We welcome submissions from both the PhD student and PhD advisor/supervisor although we encourage them to coordinate. ============================================================ SUBMISSION: Please submit the following information to Graham Hutton by 30th November 2019: o Dissertation title: (including any subtitle) o Student: (full name) o Awarding institution: (full name and country) o Date of PhD award: (month and year; depending on the institution, this may be the date of the viva, corrections being approved, graduation ceremony, or otherwise) o Advisor/supervisor: (full names) o Dissertation URL: (please provide a permanently accessible link to the dissertation if you have one, such as to an institutional repository or other public archive; links to personal web pages should be considered a last resort) o Dissertation abstract: (plain text, maximum 350 words; you may use \emph{...} for emphasis, but we prefer no other markup or formatting; if your original abstract exceeds the word limit, please submit an abridged version within the limit) Please do not submit a copy of the dissertation itself, as this is not required. JFP reserves the right to decline to publish abstracts that are not deemed appropriate. ============================================================ PHD ABSTRACT EDITOR: Graham Hutton School of Computer Science University of Nottingham Nottingham NG8 1BB United Kingdom ============================================================ This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From kaposi.ambrus at gmail.com Tue Nov 5 11:38:28 2019 From: kaposi.ambrus at gmail.com (Ambrus Kaposi) Date: Tue, 5 Nov 2019 11:38:28 +0100 Subject: [Agda] Call for Conference Grant Applications (Inclusiveness Target Countries) In-Reply-To: References: Message-ID: Call for Conference Grant Applications The European research network on types for programming and verification (EUTypes COST Action, https://eutypes.cs.ru.nl) supports attendance of young researchers presenting work on type theory at international conferences via travel grants. The rules are described here: https://eutypes.cs.ru.nl/ConfGrants The main points are: * Only researchers from ITCs participating in the action are eligible. As of June 2018, the ITCs involved in EUTypes are: Bosnia and Herzegovina, Cyprus, Czech Republic, Estonia, Hungary, Lithuania, Macedonia, Poland, Portugal, Romania, Serbia, Slovenia. * Only PhD students and Early Career Investigators (researchers whose PhD degree is at most 8 years old) are eligible. * The grantee must give a talk or present a poster on the topic of type theory. Applications have to be submitted through the e-COST system: https://e-services.cost.eu/conferencegrant Please inform researchers in your country who might be interested and contact me if you have any questions. Many thanks, Ambrus Kaposi EUTypes conference grant coordinator -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Tue Nov 5 22:14:35 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Tue, 5 Nov 2019 21:14:35 +0000 Subject: [Agda] copattern split in Emacs? Message-ID: Hi all, is there a key stroke for copattern split? I looked up the docs and it seems not, right? Thanks, Jason Hu https://hustmphrrr.github.io/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From james.wood.100 at strath.ac.uk Tue Nov 5 22:41:43 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Tue, 5 Nov 2019 21:41:43 +0000 Subject: [Agda] copattern split in Emacs? In-Reply-To: References: Message-ID: Hi Jason, If I understand the question correctly, it's the usual C-c C-c for case-splitting, but on an empty hole and followed immediately by RET, rather than entering a variable name. The intermediate prompt is ?pattern variables to case (empty for split on result)?. It's splitting on the result that you want. Regards, James On 05/11/2019 21:14, Jason -Zhong Sheng- Hu wrote: Hi all, is there a key stroke for copattern split? I looked up the docs and it seems not, right? Thanks, Jason Hu https://hustmphrrr.github.io/ _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From benjamin.price at strath.ac.uk Wed Nov 6 19:11:18 2019 From: benjamin.price at strath.ac.uk (Benjamin Price) Date: Wed, 6 Nov 2019 18:11:18 +0000 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: , Message-ID: Hi Jesper, Thanks for taking the time to write this post - rewrite rules are very interesting, and I feel I understand them better now. I have a question about pattern matching on the parameters of a type: You say that patterns must match on "generic" parameters, i.e. matching against (or having a rewrite rule on) `_::_ {Bool} x xs` is bad, but `_::_ {a} x xs` is fine. This is due to (the internal representation of) constructors not storing those arguments, presumably because by pattern-match time, we have already forgotten those arguments corresponding to parameters, and thus have nothing to match against. However, since pattern matching is type-directed, could we not recover the parameters from the type? To be concrete, what goes wrong with the following rule (for data D (A : Set) : Set where C : T -> D A)? [B : Set // p] => sub1 [s : T[B/A] // q] => sub2 -------------------------------------------------- [C {_} s : D B // C {p} q] => sub1 + sub2 where I write an underscore for the elided parameter-argument of the constructor. Cheers, Ben ________________________________________ From: Agda on behalf of Jesper Cockx Sent: 30 October 2019 16:58 To: agda list Subject: Re: [Agda] New blog post: Hack your type theory with rewrite rules Hello again, The second part of my blog series on rewrite rules in Agda is now online: https://jesper.sikanda.be/posts/rewriting-type-theory.html. This time I go into the nitty-gritty details of how rewrite rules work and how they interact with other features of Agda. Comments are very welcome as usual! -- Jesper On Mon, Oct 21, 2019 at 3:22 PM Jesper Cockx > wrote: Hi Agda folks, I have another blog post for you on extending Agda with rewrite rules, with no less than six examples of how they can be used. You can read it at https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments are welcome here on the mailing list as usual. Cheers, Jesper From jac.karwowski at gmail.com Thu Nov 7 09:17:49 2019 From: jac.karwowski at gmail.com (Jacek Karwowski) Date: Thu, 7 Nov 2019 03:17:49 -0500 Subject: [Agda] Termination checker on commutative functions In-Reply-To: References: Message-ID: Hi Jesper, Thanks for your response and your time. This indeed solves the example toy problem, but it does that by exploiting some structure in this code (this obviously means it wasn't a good example to begin with, sorry about that). What I'm looking for, In general, is a fully general solution that treats the constructors as more-or-less black boxes (in particular, under assumption that there's no easy way of defining functions over subsets of them, like you did with substraction). Let's say there are three constructors: ``` postulate X : Set Y : Set Z : Set T' : Set data T : Set where A : X -> T B : Y -> T C : Z -> T ``` and I'd now like to define a commutative function over them. ``` f : T -> T -> T' f (A x) (A x) = (some complicated definition using the specifics of x's) f (A x) (B y) = (some complicated definition using the specifics of x's and y's) f (A x) (C z) = (some complicated definition using the specifics of x's and z's) -- etc for all other required cases -- and now I don't want to repeat code from above, but I want to be able to define f (B y) (A x) = f (A x) (B y) f (C z) (A x) = f (A x) (C z) f (C z) (B y) = f (B y) (C z) ``` There's no easy way of refactoring out these particular cases, and then just using this refactored-out function with changed order of arguments. So, is there any "idiomatic" way of dealing with these kinds of situations? Best Jacek On Thu, Oct 31, 2019 at 5:03 AM Jesper Cockx wrote: > Hi Jacek, > > The easiest solution here would be to first define a helper function for > subtraction on `Nat`, and then use it to deal with the two symmetric cases: > > ``` > module _ where > > open import Agda.Builtin.Nat > > data Int : Set where > Pos : (x : Nat) ? Int > Neg : (x : Nat) ? Int > > _?Nat_ : Nat ? Nat ? Int > x ?Nat zero = Pos x > zero ?Nat y = Neg y > (suc x) ?Nat (suc y) = x ?Nat y > > _?_ : Int ? Int ? Int > Pos x ? Pos y = Pos (x + y) > Neg x ? Neg y = Neg (x + y) > Pos x ? Neg y = x ?Nat y > Neg x ? Pos y = y ?Nat x > ``` > > -- Jesper > > On Thu, Oct 31, 2019 at 2:00 AM Jacek Karwowski > wrote: > >> Hi, >> >> I'm trying to write a commutative function over some type, and not repeat >> the code in the process. >> >> The toy example is as follows: >> ``` >> module _ where >> >> open import Data.Nat >> >> data Int : {i : Size} -> Set where >> Pos : (x : ?) -> Int >> Neg : (x : ?) -> Int >> >> _?_ : Int -> Int -> Int >> Pos x ? Pos y = Pos (x + y) >> Neg x ? Neg y = Neg (x + y) >> Pos x ? Neg zero = Pos x >> Pos zero ? Neg y = Neg y >> Pos (suc x) ? Neg (suc y) = (Pos x) ? (Neg y) >> --- problematic call >> Neg x ? Pos y = (Pos y) ? (Neg x) >> ``` >> In the example above, termination checker complains about the last call, >> since it is not a structural recursion. >> >> (Of course, real types can (and do) have more than two constructors, the >> constructors are recursive, etc.) >> >> The naive, manual way I see would be to introduce an explicit order on >> the constructors by some external function, and then call ? passing this >> parameter over: >> >> ``` >> ord : Int -> ? >> ord (Pos _) = 0 >> ord (Neg _) = 1 >> >> _?_ : {s : ?} -> (x : Int) -> {s ? ord x} -> Int -> Int >> Pos x ? Pos y = Pos (x + y) >> Neg x ? Neg y = Neg (x + y) >> Pos x ? Neg zero = Pos x >> Pos zero ? Neg y = Neg y >> Pos (suc x) ? Neg (suc y) = _?_ {zero} (Pos x) {refl} (Neg y) >> --- problematic call >> _?_ {suc zero} (Neg x) (Pos y) = _?_ {zero} (Pos y) {refl} (Neg x) >> ``` >> but this ends up being very ugly and hard to read. >> >> What is the idiomatic way of handling these types of situations, >> introducing as little code overhead as possible? >> >> Thanks, >> Jacek >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -- Best regards Jacek Karwowski -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Thu Nov 7 10:04:59 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Thu, 7 Nov 2019 10:04:59 +0100 Subject: [Agda] Termination checker on commutative functions In-Reply-To: References: Message-ID: Hi Jacek, The best way I know to deal with these kind of situations is to define a 'view' type that makes the cases you want to consider explicit. ``` case_of_ : {A B : Set} ? A ? (A ? B) ? B case x of f = f x data Case-f : Set where A-A : X ? X ? Case-f A-B : X ? Y ? Case-f A-C : X ? Z ? Case-f -- etc view-f : T ? T ? Case-f view-f (A x?) (A x?) = A-A x? x? view-f (A x) (B y ) = A-B x y view-f (A x) (C z ) = A-C x z view-f (B y) (A x ) = A-B x y view-f (C z) (A x ) = A-C x z view-f (C z) (B y ) = {!etc!} f : T ? T ? T' f x y = case (view-f x y) of ? where (A-A x? x?) ? {!complicated stuff!} (A-B x y ) ? {!more complicated stuff!} (A-C x z ) ? {!even more complicated stuff!} ``` This is a bit more verbose to begin with, but it usually pays off to have a view type when you want to prove stuff about the function f, since you are now better equipped to talk about the symmetric cases without repeating yourself. -- Jesper On Thu, Nov 7, 2019 at 9:18 AM Jacek Karwowski wrote: > Hi Jesper, > > Thanks for your response and your time. This indeed solves the example toy > problem, but it does that by exploiting some structure in this code (this > obviously means it wasn't a good example to begin with, sorry about that). > What I'm looking for, In general, is a fully general solution that treats > the constructors as more-or-less black boxes (in particular, under > assumption that there's no easy way of defining functions over subsets of > them, like you did with substraction). > > Let's say there are three constructors: > ``` > postulate > X : Set > Y : Set > Z : Set > T' : Set > > data T : Set where > A : X -> T > B : Y -> T > C : Z -> T > ``` > > and I'd now like to define a commutative function over them. > > ``` > f : T -> T -> T' > f (A x) (A x) = (some complicated definition using the specifics of x's) > f (A x) (B y) = (some complicated definition using the specifics of x's > and y's) > f (A x) (C z) = (some complicated definition using the specifics of x's > and z's) > -- etc for all other required cases > -- and now I don't want to repeat code from above, but I want to be able > to define > f (B y) (A x) = f (A x) (B y) > f (C z) (A x) = f (A x) (C z) > f (C z) (B y) = f (B y) (C z) > ``` > > There's no easy way of refactoring out these particular cases, and then > just using this refactored-out function with changed order of arguments. > So, is there any "idiomatic" way of dealing with these kinds of situations? > > Best > Jacek > > On Thu, Oct 31, 2019 at 5:03 AM Jesper Cockx wrote: > >> Hi Jacek, >> >> The easiest solution here would be to first define a helper function for >> subtraction on `Nat`, and then use it to deal with the two symmetric cases: >> >> ``` >> module _ where >> >> open import Agda.Builtin.Nat >> >> data Int : Set where >> Pos : (x : Nat) ? Int >> Neg : (x : Nat) ? Int >> >> _?Nat_ : Nat ? Nat ? Int >> x ?Nat zero = Pos x >> zero ?Nat y = Neg y >> (suc x) ?Nat (suc y) = x ?Nat y >> >> _?_ : Int ? Int ? Int >> Pos x ? Pos y = Pos (x + y) >> Neg x ? Neg y = Neg (x + y) >> Pos x ? Neg y = x ?Nat y >> Neg x ? Pos y = y ?Nat x >> ``` >> >> -- Jesper >> >> On Thu, Oct 31, 2019 at 2:00 AM Jacek Karwowski >> wrote: >> >>> Hi, >>> >>> I'm trying to write a commutative function over some type, and not >>> repeat the code in the process. >>> >>> The toy example is as follows: >>> ``` >>> module _ where >>> >>> open import Data.Nat >>> >>> data Int : {i : Size} -> Set where >>> Pos : (x : ?) -> Int >>> Neg : (x : ?) -> Int >>> >>> _?_ : Int -> Int -> Int >>> Pos x ? Pos y = Pos (x + y) >>> Neg x ? Neg y = Neg (x + y) >>> Pos x ? Neg zero = Pos x >>> Pos zero ? Neg y = Neg y >>> Pos (suc x) ? Neg (suc y) = (Pos x) ? (Neg y) >>> --- problematic call >>> Neg x ? Pos y = (Pos y) ? (Neg x) >>> ``` >>> In the example above, termination checker complains about the last call, >>> since it is not a structural recursion. >>> >>> (Of course, real types can (and do) have more than two constructors, the >>> constructors are recursive, etc.) >>> >>> The naive, manual way I see would be to introduce an explicit order on >>> the constructors by some external function, and then call ? passing this >>> parameter over: >>> >>> ``` >>> ord : Int -> ? >>> ord (Pos _) = 0 >>> ord (Neg _) = 1 >>> >>> _?_ : {s : ?} -> (x : Int) -> {s ? ord x} -> Int -> Int >>> Pos x ? Pos y = Pos (x + y) >>> Neg x ? Neg y = Neg (x + y) >>> Pos x ? Neg zero = Pos x >>> Pos zero ? Neg y = Neg y >>> Pos (suc x) ? Neg (suc y) = _?_ {zero} (Pos x) {refl} (Neg y) >>> --- problematic call >>> _?_ {suc zero} (Neg x) (Pos y) = _?_ {zero} (Pos y) {refl} (Neg x) >>> ``` >>> but this ends up being very ugly and hard to read. >>> >>> What is the idiomatic way of handling these types of situations, >>> introducing as little code overhead as possible? >>> >>> Thanks, >>> Jacek >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >>> >> > > -- > Best regards > Jacek Karwowski > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Thu Nov 7 12:01:12 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Thu, 7 Nov 2019 11:01:12 +0000 Subject: [Agda] initial T-algebra for an endofunctor T, via sized types In-Reply-To: References: Message-ID: <505851D0-B63C-4124-AFEE-9BE978551EB9@cl.cam.ac.uk> Recently I have been more or less forced into using Agda?s sized types to get a certain development to go through and it has set me thinking about the use of sized types with inductive definitions. The current documentation stub says "Sizes help the termination checker by tracking the depth of data structures across definition boundaries? and then goes on to give an extended example to do with coinduction; but of course sizes are useful for induction too. To get a better feel for what one can achieve, I tried using sizes to construct the (provably) initial algebra for a postulated strictly positive endofunctor on Set and eventually succeeded; but the construction was much more elaborate than I expected (and involved the use of quotient types). You can see it here: > Did I somehow over-complicate things? Am I re-inventing a construction that already exists? Andy Pitts -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Fri Nov 8 10:24:56 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Fri, 8 Nov 2019 10:24:56 +0100 Subject: [Agda] New blog post: Hack your type theory with rewrite rules In-Reply-To: References: Message-ID: Hi Benjamin, My remarks on the constructor parameters refers to rewrite rules on constructors, i.e. ones where the constructor is the head symbol. Since reduction in Agda is untyped, there's no way to reconstruct the parameters in this situation (without major changes to Agda). OTOH when there's a constructor at a nested position in the pattern then there's not even a need to reconstruct the parameters, as they are guaranteed to match by typing. So basically the implementation already works as in the rule you suggest (see https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Rewriting/NonLinMatch.hs#L272-L275 in the implementation if you're interested, 'getFullyAppliedConType does the application of the constructor type to the parameters). -- Jesper On Wed, Nov 6, 2019 at 7:12 PM Benjamin Price wrote: > Hi Jesper, > > Thanks for taking the time to write this post - rewrite rules are very > interesting, and I feel I understand them better now. > > I have a question about pattern matching on the parameters of a type: > > You say that patterns must match on "generic" parameters, i.e. matching > against (or having a rewrite rule on) `_::_ {Bool} x xs` is bad, but `_::_ > {a} x xs` is fine. > This is due to (the internal representation of) constructors not storing > those arguments, presumably because by pattern-match time, we have already > forgotten those arguments corresponding to parameters, and thus have > nothing to match against. > However, since pattern matching is type-directed, could we not recover the > parameters from the type? > To be concrete, what goes wrong with the following rule (for data D (A : > Set) : Set where C : T -> D A)? > > [B : Set // p] => sub1 [s : T[B/A] // q] => sub2 > -------------------------------------------------- > [C {_} s : D B // C {p} q] => sub1 + sub2 > > where I write an underscore for the elided parameter-argument of the > constructor. > > Cheers, > Ben > > ________________________________________ > From: Agda on behalf of Jesper Cockx < > Jesper at sikanda.be> > Sent: 30 October 2019 16:58 > To: agda list > Subject: Re: [Agda] New blog post: Hack your type theory with rewrite rules > > Hello again, > > The second part of my blog series on rewrite rules in Agda is now online: > https://jesper.sikanda.be/posts/rewriting-type-theory.html. This time I > go into the nitty-gritty details of how rewrite rules work and how they > interact with other features of Agda. Comments are very welcome as usual! > > -- Jesper > > On Mon, Oct 21, 2019 at 3:22 PM Jesper Cockx Jesper at sikanda.be>> wrote: > Hi Agda folks, > > I have another blog post for you on extending Agda with rewrite rules, > with no less than six examples of how they can be used. You can read it at > https://jesper.sikanda.be/posts/hack-your-type-theory.html. Any comments > are welcome here on the mailing list as usual. > > Cheers, > Jesper > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Fri Nov 8 11:01:12 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Fri, 8 Nov 2019 10:01:12 +0000 Subject: [Agda] initial T-algebra for an endofunctor T, via sized types In-Reply-To: <20191107161845.GW17715@x1> References: <505851D0-B63C-4124-AFEE-9BE978551EB9@cl.cam.ac.uk> <20191107161845.GW17715@x1> Message-ID: <804839FE-8D82-4A66-8780-789CAE09E06E@cl.cam.ac.uk> Hi Wouter. > On 7 Nov 2019, at 16:18, Swierstra, W.S. (Wouter) wrote: > > Dear Andy, > >> Did I somehow over-complicate things? Am I re-inventing a construction that already exists? > > I'm not sure what your goal is exactly -- and I may be answering a > different question entirely -- but one approach that might work for > you would be to *not* try to take the fixpoint of some arbitrary T : > Set -> Set, but instead define a universe of well-behaved functors, > closed under identity, coproducts, products, etc. Yes, if one assumes more about the endofunctor as you suggest (it can be built up using certain functorial constructions) then I?m sure one can prove the existence of initial algebras; and one probably doesn?t need sized types to do that (recurse over the structure of codes instead). However, I was more interested in trying to get a feel for the power of sized types (for inductive things): given that sized types are available, what do we have to assume about an endofunctor in order to use them to construct an initial algebra in Agda as the size-indexed ?colimit? of approximations to it? The answer (slightly surprising to me) was: nothing other than telling Agda about its strictly positive polarity. > Agda is just about smart enough to let you can define the > corresponding initial algebra, maps and folds for the functors that > inhabit this universe. I haven't tried doing all the proofs -- some > will probably require function extensionality -- but I've sketched the > main ideas in the attached .agda file. I learned of the definition of > 'foldMap' -- that passes Agda's termination checker -- from Ulf > Norell's lecture notes on Agda. This trick might work for your > development too, but I haven't tried it. Thank you for telling me about foldMap! Best wishes, Andy From Thorsten.Altenkirch at nottingham.ac.uk Fri Nov 8 12:21:10 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Fri, 8 Nov 2019 11:21:10 +0000 Subject: [Agda] initial T-algebra for an endofunctor T, via sized types In-Reply-To: <505851D0-B63C-4124-AFEE-9BE978551EB9@cl.cam.ac.uk> References: <505851D0-B63C-4124-AFEE-9BE978551EB9@cl.cam.ac.uk> Message-ID: Hi, I didn?t see Wouter?s comment but I guess I can add another unhelpful comment along the same lines. Really a strictly positive operator should be a container and we do need some syntactic sugar for this so that we just have to write something similar as what you do (didn?t even know there were strict positivity annotations). The same criticism applies to the whole sized type story: a reasonable implementation of sized types should be just syntactic sugar for programs we can define without them. But I realize you want to use agda as it is and my principled complaints are not helping. However, they are the reason that I haven?t taken these adhoc extensions serious. I am still waiting that somebody provides a reasonable explanation (i.e. semantics / translation) for them. Thorsten From: Agda on behalf of Andrew Pitts Date: Thursday, 7 November 2019 at 11:01 To: agda list Subject: [Agda] initial T-algebra for an endofunctor T, via sized types Recently I have been more or less forced into using Agda?s sized types to get a certain development to go through and it has set me thinking about the use of sized types with inductive definitions. The current documentation stub says "Sizes help the termination checker by tracking the depth of data structures across definition boundaries? and then goes on to give an extended example to do with coinduction; but of course sizes are useful for induction too. To get a better feel for what one can achieve, I tried using sizes to construct the (provably) initial algebra for a postulated strictly positive endofunctor on Set and eventually succeeded; but the construction was much more elaborate than I expected (and involved the use of quotient types). You can see it here: Did I somehow over-complicate things? Am I re-inventing a construction that already exists? Andy Pitts This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew.pitts at cl.cam.ac.uk Fri Nov 8 13:47:42 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Fri, 8 Nov 2019 12:47:42 +0000 Subject: [Agda] initial T-algebra for an endofunctor T, via sized types In-Reply-To: References: <505851D0-B63C-4124-AFEE-9BE978551EB9@cl.cam.ac.uk> Message-ID: > On 8 Nov 2019, at 11:21, Thorsten Altenkirch wrote: > > Hi, > > I didn?t see Wouter?s comment but I guess I can add another unhelpful comment along the same lines. Really a strictly positive operator should be a container and we do need some syntactic sugar for this so that we just have to write something similar as what you do (didn?t even know there were strict positivity annotations). The same criticism applies to the whole sized type story: a reasonable implementation of sized types should be just syntactic sugar for programs we can define without them. > > But I realize you want to use agda as it is and my principled complaints are not helping. However, they are the reason that I haven?t taken these adhoc extensions serious. I am still waiting that somebody provides a reasonable explanation (i.e. semantics / translation) for them. > > Thorsten I think expressing semantical scepticism is justified, and long may you do so. But such scepticism is perhaps more justified for the semantic status of Agda?s notion of ?strictly positive" than it is for its sized types, where we have some fine papers by Abel and Pientka (and maybe others) about its theory. (Although there is more to understand: I think your first paragraph expresses the hope that sized types are a conservative extension of some more well-understood, core type theory ? it would be good to have results settling that sort of question one way or another.) Andy -------------- next part -------------- An HTML attachment was scrubbed... URL: From fdhzs2010 at hotmail.com Fri Nov 8 17:59:59 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Fri, 8 Nov 2019 16:59:59 +0000 Subject: [Agda] copattern split in Emacs? In-Reply-To: References: , Message-ID: thank you. indeed that is the trick. Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of James Wood Sent: November 5, 2019 4:41 PM To: agda at lists.chalmers.se Subject: Re: [Agda] copattern split in Emacs? Hi Jason, If I understand the question correctly, it's the usual C-c C-c for case-splitting, but on an empty hole and followed immediately by RET, rather than entering a variable name. The intermediate prompt is ?pattern variables to case (empty for split on result)?. It's splitting on the result that you want. Regards, James On 05/11/2019 21:14, Jason -Zhong Sheng- Hu wrote: Hi all, is there a key stroke for copattern split? I looked up the docs and it seems not, right? Thanks, Jason Hu https://hustmphrrr.github.io/ _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From jsiek at indiana.edu Sun Nov 10 14:46:54 2019 From: jsiek at indiana.edu (Siek, Jeremy) Date: Sun, 10 Nov 2019 13:46:54 +0000 Subject: [Agda] irrelevant contradiction? Message-ID: Is there a form of contradiction that allows irrelevant arguments? Cheers, Jeremy __________________________________________ Jeremy G. Siek > Professor Luddy School of Informatics, Computing, and Engineering Indiana University Bloomington http://homes.soic.indiana.edu/jsiek/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From apostolis.xekoukoulotakis at gmail.com Sun Nov 10 16:52:32 2019 From: apostolis.xekoukoulotakis at gmail.com (Apostolis Xekoukoulotakis) Date: Sun, 10 Nov 2019 17:52:32 +0200 Subject: [Agda] irrelevant contradiction? In-Reply-To: References: Message-ID: Yes, in the agda-stdlib. On Sun, Nov 10, 2019 at 3:47 PM Siek, Jeremy wrote: > Is there a form of contradiction that allows irrelevant arguments? > > Cheers, > Jeremy > > __________________________________________ > Jeremy G. Siek > Professor > Luddy School of Informatics, Computing, and Engineering > Indiana University Bloomington > http://homes.soic.indiana.edu/jsiek/ > > > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Thorsten.Altenkirch at nottingham.ac.uk Mon Nov 11 11:29:11 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Mon, 11 Nov 2019 10:29:11 +0000 Subject: [Agda] Aquamacs path? Message-ID: <9A704384-0A54-4F38-9DFE-568DA802581C@nottingham.ac.uk> Hi guys, I tried to be more principled when installing software on my new imac but I seemed to have messed something up. When I try to open an agda file I get the error File mode specification error: (file-error "Searching for program" "No such file or directory" "agda") I checked and agda is visible when I start a shell. The path is set via source ~/.ghcup/env which is in .bash_profile but to be sure I also copied it to (.bashrc and .profile). Maybe I am missing something here? It works when I add a line (setq exec-path (cons "/Users/psztxa/.cabal/bin/" exec-path)) To .emacs but this shouldn?t be necessary, or? Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From Filippo.Sestini at nottingham.ac.uk Mon Nov 11 11:48:25 2019 From: Filippo.Sestini at nottingham.ac.uk (Filippo Sestini) Date: Mon, 11 Nov 2019 10:48:25 +0000 Subject: [Agda] Aquamacs path? Message-ID: <9F6E1269-DD43-4ECB-B014-98739983C1DE@nottingham.ac.uk> Hi Thorsten, When Emacs is started from a terminal session, it inherits the values of all environment variables from shell. However, when Emacs is launched from a GUI environment (as is the default case with Aquamacs), this doesn't happen, and its internal PATH is not initialized to the same that the shell uses, hence the need to set it in other ways. There are elisp packages you can install that make Emacs load PATH from the shell automatically, like https://github.com/purcell/exec-path-from-shell -- Filippo ?On 11/11/19, 10:29 AM, "Agda on behalf of Thorsten Altenkirch" wrote: Hi guys, I tried to be more principled when installing software on my new imac but I seemed to have messed something up. When I try to open an agda file I get the error File mode specification error: (file-error "Searching for program" "No such file or directory" "agda") I checked and agda is visible when I start a shell. The path is set via source ~/.ghcup/env which is in .bash_profile but to be sure I also copied it to (.bashrc and .profile). Maybe I am missing something here? It works when I add a line (setq exec-path (cons "/Users/psztxa/.cabal/bin/" exec-path)) To .emacs but this shouldn?t be necessary, or? Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From jsiek at indiana.edu Mon Nov 11 13:49:32 2019 From: jsiek at indiana.edu (Siek, Jeremy) Date: Mon, 11 Nov 2019 12:49:32 +0000 Subject: [Agda] irrelevant contradiction? In-Reply-To: References: Message-ID: Thanks! On Nov 10, 2019, at 10:52 AM, Apostolis Xekoukoulotakis > wrote: Yes, in the agda-stdlib. On Sun, Nov 10, 2019 at 3:47 PM Siek, Jeremy > wrote: Is there a form of contradiction that allows irrelevant arguments? Cheers, Jeremy __________________________________________ Jeremy G. Siek > Professor Luddy School of Informatics, Computing, and Engineering Indiana University Bloomington http://homes.soic.indiana.edu/jsiek/ _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda __________________________________________ Jeremy G. Siek > Professor Luddy School of Informatics, Computing, and Engineering Indiana University Bloomington http://homes.soic.indiana.edu/jsiek/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From matthewdaggitt at gmail.com Mon Nov 11 14:22:13 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Mon, 11 Nov 2019 21:22:13 +0800 Subject: [Agda] [ANNOUNCE] Standard library v1.2 Message-ID: Dear all, The Agda Team is very pleased to announce the release of the standard library 1.2. The library has been tested using Agda 2.6.0.1. The new version of the library, CHANGELOG and README are available at http://wiki.portal.chalmers.se/agda/pmwiki.php?n=Libraries.StandardLibrary Highlights include: - A new function hierarchy. - New (homo/mono/iso)morphism infrastructure for algebraic and relational structures. - A formalisation of fresh lists. - First proofs of algebraic properties for operations over ?. - Improved reduction and computational behaviour for all decidability proofs. Best wishes, Matthew -------------- next part -------------- An HTML attachment was scrubbed... URL: From scm at iis.sinica.edu.tw Mon Nov 11 15:29:11 2019 From: scm at iis.sinica.edu.tw (Shin-Cheng Mu) Date: Mon, 11 Nov 2019 22:29:11 +0800 Subject: [Agda] FLOPS 2020 Final Call for papers Message-ID: <66900361-A695-4BC4-ABA2-752B79864CEE@iis.sinica.edu.tw> FINAL Call For Papers FLOPS 2020: 15th International Symposium on Functional and Logic Programming In-Cooperation with ACM SIGPLAN =============================== 23-25 April, 2020, Akita, Japan https://www.ipl.riec.tohoku.ac.jp/FLOPS2020/ Writing down detailed computational steps is not the only way of programming. An alternative, being used increasingly in practice, is to start by writing down the desired properties of the result. The computational steps are then (semi-)automatically derived from these higher-level specifications. Examples of this declarative style of programming include functional and logic programming, program transformation and rewriting, and extracting programs from proofs of their correctness. FLOPS aims to bring together practitioners, researchers and implementors of the declarative programming paradigm, to discuss mutually interesting results and common problems: theoretical advances, their implementations in language systems and tools, and applications of these systems in practice. The scope includes all aspects of the design, semantics, theory, applications, implementations, and teaching of declarative programming. FLOPS specifically aims to promote cross-fertilization between theory and practice and among different styles of declarative programming. *** Scope *** FLOPS solicits original papers in all areas of the declarative programming: * functional, logic, functional-logic programming, rewriting systems, formal methods and model checking, program transformations and program refinements, developing programs with the help of theorem provers or SAT/SMT solvers, verifying properties of programs using declarative programming techniques; * foundations, language design, implementation issues (compilation techniques, memory management, run-time systems, etc.), applications and case studies. FLOPS promotes cross-fertilization among different styles of declarative programming. Therefore, research papers must be written to be understandable by the wide audience of declarative programmers and researchers. In particular, each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant for its area, and comparing it with previous work. Submission of system descriptions and declarative pearls are especially encouraged. *** Submission *** Submissions should fall into one of the following categories: * Regular research papers: they should describe new results and will be judged on originality, correctness, and significance. * System descriptions: they should describe a working system and will be judged on originality, usefulness, and design. * Declarative pearls: new and excellent declarative programs or theories with illustrative applications. System descriptions and declarative pearls must be explicitly marked as such in the title. Submissions must be unpublished and not submitted for publication elsewhere. Work that already appeared in unpublished or informally published workshops proceedings may be submitted. See also ACM SIGPLAN Republication Policy, as explained on the web at http://www.sigplan.org/Resources/Policies/Republication. Submissions must be written in English and can be up to 15 pages excluding references, though system descriptions and pearls are typically shorter. The formatting has to conform to Springer's guidelines. Regular research papers should be supported by proofs and/or experimental results. In case of lack of space, this supporting information should be made accessible otherwise (e.g., a link to an anonymized Web page or an appendix, which does not count towards the page limit). However, it is the responsibility of the authors to guarantee that their paper can be understood and appreciated without referring to this supporting information; reviewers may simply choose not to look at it when writing their review. FLOPS 2020 will employ a lightweight double-blind reviewing process. To facilitate this, submitted papers must adhere to two rules: 1. author names and institutions must be omitted, and 2. references to authors' own related work should be in the third person (e.g., not "We build on our previous work ?" but rather "We build on the work of ?"). The purpose of this process is to help the reviewers come to an initial judgement about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult (e.g., important background references should not be omitted or anonymized). In addition, authors should feel free to disseminate their ideas or draft versions of their paper as they normally would. For instance, authors may post drafts of their papers on the web or give talks on their research ideas. Papers should be submitted electronically at https://easychair.org/conferences/?conf=flops2020 Springer Guidelines https://www.springer.com/gp/computer-science/lncs/conference-proceedings-guidelines *** Proceedings *** The proceedings will be published by Springer International Publishing in the Lecture Notes in Computer Science (LNCS) series (www.springer.com/lncs). *** Important Dates *** 15 November 2019 (AoE): Abstract submission 22 November 2019 (AoE): Submission deadline 24 January 2020: Author notification 16 February 2020: Camera ready due 23-25 April 2020: FLOPS Symposium *** Programming Comittee *** Elvira Albert Universidad Complutense de Madrid Mar?a Alpuente Universitat Polit?cnica de Val?ncia Edwin Brady University of St Andrews Michael Hanus CAU Kiel Nao Hirokawa JAIST Zhenjiang Hu Peking University John Hughes Chalmers University of Technology Kazuhiro Inaba Google Shin-Ya Katsumata National Institute of Informatics Ekaterina Komendantskaya Heriot-Watt University Leonidas Lampropoulos University of Pennsylvania Akimasa Morihata The University of Tokyo Shin-Cheng Mu Academia Sinica Keisuke Nakano Tohoku University (co-chair) Koji Nakazawa Nagoya University Enrico Pontelli New Mexico State University Didier Remy INRIA Ricardo Rocha University of Porto Konstantinos Sagonas Uppsala University (co-chair) Ilya Sergey Yale-NUS College Kohei Suenaga Kyoto University Tachio Terauchi Waseda University Kazushige Terui Kyoto University Simon Thompson University of Kent *** Organizers *** Keisuke Nakano Tohoku University, Japan (PC Co-Chair, General Chair) Kostis Sagonas Uppsala University, Sweden (PC Co-Chair) Kazuyuki Asada Tohoku University, Japan (Local Co-Chair) Ryoma Sin'ya Akita University, Japan (Local Co-Chair) Katsuhiro Ueno Tohoku University, Japan (Local Co-Chair) *** Contact Address *** flops2020 _AT_ easychair.org From fdhzs2010 at hotmail.com Tue Nov 12 19:44:44 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Tue, 12 Nov 2019 18:44:44 +0000 Subject: [Agda] usage of a definition Message-ID: Hi all, is there a way to search the usage of a definition? by usage, I mean a definition is used inside of the bodies of other definitions, not just in types. note that it is more complicated than a string search, as it involves searching imported modules as well as usages of infix operators. Thanks, Jason Hu https://hustmphrrr.github.io/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From publicityifl at gmail.com Thu Nov 14 09:15:47 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Thu, 14 Nov 2019 00:15:47 -0800 Subject: [Agda] Second call for draft papers for TFPIE 2020 (Trends in Functional Programming in Education) Message-ID: Hello, Please, find below the second call for draft papers for TFPIE 2020. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Chair of TFPIE 2020 ======================================================================== TFPIE 2020 Call for papers http://www.staff.science.uu.nl/~hage0101/tfpie2020/index.html February 12th 2020, Krakow, Poland (co-located with TFP 2020 and Lambda Days) TFPIE 2020 welcomes submissions describing techniques used in the classroom, tools used in and/or developed for the classroom and any creative use of functional programming (FP) to aid education in or outside Computer Science. Topics of interest include, but are not limited to: FP and beginning CS students FP and Computational Thinking FP and Artificial Intelligence FP in Robotics FP and Music Advanced FP for undergraduates FP in graduate education Engaging students in research using FP FP in Programming Languages FP in the high school curriculum FP as a stepping stone to other CS topics FP and Philosophy The pedagogy of teaching FP FP and e-learning: MOOCs, automated assessment etc. Best Lectures - more details below In addition to papers, we are requesting best lecture presentations. What's your best lecture topic in an FP related course? Do you have a fun way to present FP concepts to novices or perhaps an especially interesting presentation of a difficult topic? In either case, please consider sharing it. Best lecture topics will be selected for presentation based on a short abstract describing the lecture and its interest to TFPIE attendees. The length of the presentation should be comparable to that of a paper. On top of the lecture itself, the presentation can also provide commentary on the lecture. Submissions Potential presenters are invited to submit an extended abstract (4-6 pages) or a draft paper (up to 20 pages) in EPTCS style. The authors of accepted presentations will have their preprints and their slides made available on the workshop's website. Papers and abstracts can be submitted via easychair at the following link: https://easychair.org/conferences/?conf=tfpie2020 . After the workshop, presenters will be invited to submit (a revised version of) their article for review. The PC will select the best articles that will be published in the Electronic Proceedings in Theoretical Computer Science (EPTCS). Articles rejected for presentation and extended abstracts will not be formally reviewed by the PC. Dates Submission deadline: January 14th 2020, Anywhere on Earth. Notification: January 17th 2020 TFPIE Registration Deadline: January 20th 2020 Workshop: February 12th 2020 Submission for formal review: April 19th 2020, Anywhere on Earth. Notification of full article: June 6th 2020 Camera ready: July 1st 2020 Program Committee Olaf Chitil - University of Kent Youyou Cong - Tokyo Institute of Technology Marko van Eekelen - Open University of the Netherlands and Radboud University Nijmegen Jurriaan Hage (Chair) - Utrecht University Marco T. Morazan - Seton Hall University, USA Sharon Tuttle - Humboldt State University, USA Janis Voigtlaender - University of Duisburg-Essen Viktoria Zsok - Eotvos Lorand University Note: information on TFP is available at http://www.cse.chalmers.se/~rjmh/tfp/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From alejandro at diaz-caro.info Fri Nov 15 21:55:18 2019 From: alejandro at diaz-caro.info (=?UTF-8?Q?Alejandro_D=C3=ADaz=2DCaro?=) Date: Fri, 15 Nov 2019 17:55:18 -0300 Subject: [Agda] ECI 2020: DEADLINE EXTENSION (22 Nov 19) - Call for course proposals In-Reply-To: References: Message-ID: Final Call for course proposals (*** DEADLINE EXTENSION ***) 34th Informatics Sciences School - ECI 2020 July 20 to 24, 2020 Buenos Aires, Argentina https://www.easychair.org/cfp/ECI2020 https://eci2020.dc.uba.ar IMPORTANT DATES 22 November 2019: Proposal submission deadline End of January 2020: Notification This is an invitation to submit proposals for courses in all areas of Computer Science to be included in the program of the "34a Escuela de Ciencias Inform?ticas" - ECI 2020, to be held at Departamento de Computaci?n, Facultad de Ciencias Exactas y Naturales, Universidad de Buenos Aires, from July 20 to 24, 2020. The Escuela de Ciencias Inform?ticas (ECI) is held annually at our department, since 1987. The goal of ECI is to offer to Computer Science students and practitioners intensive, top-level courses on topics not covered by the regular curricula. These courses are taught by prestigious lecturers from universities and institutions from all around the world. Each year, between 400 and 800 people participate in ECI, taking one, two or three courses each. COURSE FORMAT ECI courses last 15 hours in total (3 hours per day from Monday to Friday) and are addressed to advanced undergraduate or graduate students. These courses should include a final evaluation, which can be a take-home to be sent by e-?mail to the lecturer. Submissions for courses to be taught in Spanish or English are accepted. The school will cover travel, hotel and local expenses of ECI 2020 lecturers (ECI will only cover the expenses of one lecturer per proposed course). SUBMISSION INSTRUCTIONS Proposals should be submitted through https://easychair.org/conferences/?conf=eci2020 The submission must be done in PDF format, containing only the following sections: * Full Name * Course Title * Abstract (At most 1300 characters) * Topic (You must choose among the first level of ACM CCS ( https://dl.acm.org/ccs/ccs.cfm), e.g. "Theory of computation"). * Language: [English/Spanish] * Brief index (a list of topics that will be covered during the course) * Schedule (Approximate timeline of how these topics will be presented from Monday to Friday). * Suggested bibliography (At least three books or papers that are related to the topics of the course) * Student's preferred background (Background the students should have to be able to follow the course. A general description in the form of course names or topics will suffice.). * Will the course have a lab section? [Yes/No] (Optionally, your course can have a lab section for hands-on practice. In this case, the ECI organization will assign lab space with computers for the students. Note that having a lab section will restrict the number of students your course can have to no more than 50). * Optional: Local contact. (A local contact in the Department of Computer Science, FCEyN, UBA is desirable, but not mandatory) For information about previous editions, please refer to https://eci2020.dc.uba.ar/anteriores.html or send e-?mail to eci2020-chair at dc.uba.ar. Alejandro D?az-Caro (Chair) Luciana Ferrer (Co-Chair) -------------- next part -------------- An HTML attachment was scrubbed... URL: From scm at iis.sinica.edu.tw Sat Nov 16 04:47:59 2019 From: scm at iis.sinica.edu.tw (Shin-Cheng Mu) Date: Sat, 16 Nov 2019 11:47:59 +0800 Subject: [Agda] FLOPS 2020 CFP: Deadline Extension! Message-ID: <37218B5A-0EC8-4903-8A43-DB157CAD703A@iis.sinica.edu.tw> FINAL Call For Papers (*** DEADLINE EXTENSION ***) FLOPS 2020: 15th International Symposium on Functional and Logic Programming In-Cooperation with ACM SIGPLAN =============================== 23-25 April, 2020, Akita, Japan https://www.ipl.riec.tohoku.ac.jp/FLOPS2020/ Writing down detailed computational steps is not the only way of programming. An alternative, being used increasingly in practice, is to start by writing down the desired properties of the result. The computational steps are then (semi-)automatically derived from these higher-level specifications. Examples of this declarative style of programming include functional and logic programming, program transformation and rewriting, and extracting programs from proofs of their correctness. FLOPS aims to bring together practitioners, researchers and implementors of the declarative programming paradigm, to discuss mutually interesting results and common problems: theoretical advances, their implementations in language systems and tools, and applications of these systems in practice. The scope includes all aspects of the design, semantics, theory, applications, implementations, and teaching of declarative programming. FLOPS specifically aims to promote cross-fertilization between theory and practice and among different styles of declarative programming. *** Scope *** FLOPS solicits original papers in all areas of the declarative programming: * functional, logic, functional-logic programming, rewriting systems, formal methods and model checking, program transformations and program refinements, developing programs with the help of theorem provers or SAT/SMT solvers, verifying properties of programs using declarative programming techniques; * foundations, language design, implementation issues (compilation techniques, memory management, run-time systems, etc.), applications and case studies. FLOPS promotes cross-fertilization among different styles of declarative programming. Therefore, research papers must be written to be understandable by the wide audience of declarative programmers and researchers. In particular, each submission should explain its contributions in both general and technical terms, clearly identifying what has been accomplished, explaining why it is significant for its area, and comparing it with previous work. Submission of system descriptions and declarative pearls are especially encouraged. *** Submission *** Submissions should fall into one of the following categories: * Regular research papers: they should describe new results and will be judged on originality, correctness, and significance. * System descriptions: they should describe a working system and will be judged on originality, usefulness, and design. * Declarative pearls: new and excellent declarative programs or theories with illustrative applications. System descriptions and declarative pearls must be explicitly marked as such in the title. Submissions must be unpublished and not submitted for publication elsewhere. Work that already appeared in unpublished or informally published workshops proceedings may be submitted. See also ACM SIGPLAN Republication Policy, as explained on the web at http://www.sigplan.org/Resources/Policies/Republication. Submissions must be written in English and can be up to 15 pages excluding references, though system descriptions and pearls are typically shorter. The formatting has to conform to Springer's guidelines. Regular research papers should be supported by proofs and/or experimental results. In case of lack of space, this supporting information should be made accessible otherwise (e.g., a link to an anonymized Web page or an appendix, which does not count towards the page limit). However, it is the responsibility of the authors to guarantee that their paper can be understood and appreciated without referring to this supporting information; reviewers may simply choose not to look at it when writing their review. FLOPS 2020 will employ a double-blind reviewing process. To facilitate this, submitted papers must adhere to two rules: 1. author names and institutions must be omitted, and 2. references to authors' own related work should be in the third person (e.g., not "We build on our previous work..." but rather "We build on the work of..."). The purpose of this process is to help the reviewers come to a judgement about the paper without bias, not to make it impossible for them to discover the authors if they were to try. Nothing should be done in the name of anonymity that weakens the submission or makes the job of reviewing the paper more difficult (e.g., important background references should not be omitted or anonymized). In addition, authors should feel free to disseminate their ideas or draft versions of their paper as they normally would. For instance, authors may post drafts of their papers on the web or give talks on their research ideas. Papers should be submitted electronically at https://easychair.org/conferences/?conf=flops2020 Springer Guidelines https://www.springer.com/gp/computer-science/lncs/conference-proceedings-guidelines *** Proceedings *** The proceedings will be published by Springer International Publishing in the Lecture Notes in Computer Science (LNCS) series (www.springer.com/lncs). *** Important Dates *** [EXTENDED] 22 November 2019 (AoE): Abstract submission [EXTENDED] 29 November 2019 (AoE): Submission deadline [EXTENDED] 31 January 2020: Author notification [EXTENDED] 20 February 2020: Camera ready due 23-25 April 2020: FLOPS Symposium *** Programming Comittee *** Elvira Albert Universidad Complutense de Madrid Mar?a Alpuente Universitat Polit?cnica de Val?ncia Edwin Brady University of St Andrews Michael Hanus CAU Kiel Nao Hirokawa JAIST Zhenjiang Hu Peking University John Hughes Chalmers University of Technology Kazuhiro Inaba Google Shin-Ya Katsumata National Institute of Informatics Ekaterina Komendantskaya Heriot-Watt University Leonidas Lampropoulos University of Pennsylvania Akimasa Morihata The University of Tokyo Shin-Cheng Mu Academia Sinica Keisuke Nakano Tohoku University (co-chair) Koji Nakazawa Nagoya University Enrico Pontelli New Mexico State University Didier Remy INRIA Ricardo Rocha University of Porto Konstantinos Sagonas Uppsala University (co-chair) Ilya Sergey Yale-NUS College Kohei Suenaga Kyoto University Tachio Terauchi Waseda University Kazushige Terui Kyoto University Simon Thompson University of Kent Philip Wadler, University of Edinburgh *** Organizers *** Keisuke Nakano Tohoku University, Japan (PC Co-Chair, General Chair) Kostis Sagonas Uppsala University, Sweden (PC Co-Chair) Kazuyuki Asada Tohoku University, Japan (Local Co-Chair) Ryoma Sin'ya Akita University, Japan (Local Co-Chair) Katsuhiro Ueno Tohoku University, Japan (Local Co-Chair) *** Contact Address *** flops2020 _AT_ easychair.org ------------------------------------------------------------------------------- From kbh at umn.edu Sat Nov 16 15:00:00 2019 From: kbh at umn.edu (Favonia) Date: Sat, 16 Nov 2019 08:00:00 -0600 Subject: [Agda] Multiple tenure-track positions at the University of Minnesota Message-ID: Dear All, Our department has multiple tenure-track faculty openings. One of the areas of interest is software engineering, which includes formal methods and program analysis. We are also actively considering exceptional candidates in areas such as programming languages and logic. Please see below for the official announcement: Thanks, Favonia Department of Computer Science & Engineering University of Minnesota === https://www.cs.umn.edu/news/cse-now-hiring-new-faculty The Department of Computer Science & Engineering in the College of Science and Engineering at the University of Minnesota-Twin Cities is hiring to fill multiple tenure-track positions at the assistant professor level, although higher levels of appointments may be considered when commensurate with experience and accomplishments. Outstanding candidates with research and teaching interests in theoretical computer science, software engineering, human-computer interaction, spatio-temporal databases/database systems, and robotics are particularly encouraged to apply. Nevertheless, exceptional candidates with expertise in any area of computer science & engineering will also be considered. The robotics position is in support of a University-wide initiative (MnDRIVE) on robotics, sensors, and advanced manufacturing ( z.umn.edu/csemndrive). Topics of interest include machine learning; artificial intelligence; robotics, including design, manipulation, mobility, planning, algorithmic foundations, human-robot interaction; and embedded systems. The Department of Computer Science & Engineering is fully committed to a diverse faculty because excellence emerges when individuals with different backgrounds and experiences engage. We therefore welcome applications from individuals who will further expand that diversity; women and people from other underrepresented groups are especially encouraged to apply. Candidates must have an earned Ph.D. in Computer Science & Engineering or a closely related discipline at the time of appointment. Submit materials as described at z.umn.edu/CompSciFac333233. For full consideration, please apply by November 1, 2019; however, review of applications will continue until the positions are filled. The University of Minnesota provides equal access to and opportunity in its programs, facilities, and employment without regard to race, color, creed, religion, national origin, gender, age, marital status, disability, public assistance status, veteran status, sexual orientation, gender identity, or gender expression. To learn more about equity and diversity at the University of Minnesota visit diversity.umn.edu. -------------- next part -------------- An HTML attachment was scrubbed... URL: From chantal.keller at wanadoo.fr Fri Nov 22 12:13:21 2019 From: chantal.keller at wanadoo.fr (Chantal Keller) Date: Fri, 22 Nov 2019 12:13:21 +0100 Subject: [Agda] PhD, postdoc and research engineer positions at Universite Paris-Saclay/Inria Message-ID: <8fe43d58-14e9-eab1-adff-4cf57113e40d@wanadoo.fr> Hi We are looking for a PhD student, a 2-years postdoc and a 2-years research engineer to work on automatic theorem proving in Coq and its application to blockchain verification. The first objective is the development of SMTCoq , a plugin to safely enjoy automatic theorem proving inside Coq. In collaboration with the Nomadic Labs company, a second objective is the application of proof automation to the verification of the Tezos blockchain. The detailed description of the positions can be found here: . The positions can start quickly. Please contact Chantal Keller and Valentin Blot if you are interested or if you have any questions. Chantal From Thorsten.Altenkirch at nottingham.ac.uk Fri Nov 22 16:32:39 2019 From: Thorsten.Altenkirch at nottingham.ac.uk (Thorsten Altenkirch) Date: Fri, 22 Nov 2019 15:32:39 +0000 Subject: [Agda] Reflection + monoiddsolver Message-ID: Hi, A student of mine has to prove equations over lists with append and this becomes very cumbersome quickly. What is the current status of using a monoid solver and relfection? Thorsten This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Fri Nov 22 16:40:15 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Fri, 22 Nov 2019 16:40:15 +0100 Subject: [Agda] Reflection + monoiddsolver In-Reply-To: References: Message-ID: I have a solver in agda-prelude that might work: https://github.com/UlfNorell/agda-prelude/blob/master/src/Tactic/Monoid.agda https://github.com/UlfNorell/agda-prelude/blob/master/test/MonoidTactic.agda / Ulf On Fri, Nov 22, 2019 at 4:32 PM Thorsten Altenkirch < Thorsten.Altenkirch at nottingham.ac.uk> wrote: > Hi, > > > > A student of mine has to prove equations over lists with append and this > becomes very cumbersome quickly. What is the current status of using a > monoid solver and relfection? > > > > Thorsten > > This message and any attachment are intended solely for the addressee > and may contain confidential information. If you have received this > message in error, please contact the sender and delete the email and > attachment. > > Any views or opinions expressed by the author of this email do not > necessarily reflect the views of the University of Nottingham. Email > communications with the University of Nottingham may be monitored > where permitted by law. > > > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Fri Nov 22 17:00:48 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Fri, 22 Nov 2019 17:00:48 +0100 Subject: [Agda] Reflection + monoiddsolver In-Reply-To: References: Message-ID: There is also a reflection-based monoid solver available in the experimental branch of the standard library: https://github.com/agda/agda-stdlib/blob/experimental/README/Solvers/ReflectiveMonoid.agda (I haven't used it yet myself). -- Jesper On Fri, Nov 22, 2019 at 4:41 PM Ulf Norell wrote: > I have a solver in agda-prelude that might work: > > > https://github.com/UlfNorell/agda-prelude/blob/master/src/Tactic/Monoid.agda > > https://github.com/UlfNorell/agda-prelude/blob/master/test/MonoidTactic.agda > > / Ulf > > On Fri, Nov 22, 2019 at 4:32 PM Thorsten Altenkirch < > Thorsten.Altenkirch at nottingham.ac.uk> wrote: > >> Hi, >> >> >> >> A student of mine has to prove equations over lists with append and this >> becomes very cumbersome quickly. What is the current status of using a >> monoid solver and relfection? >> >> >> >> Thorsten >> >> This message and any attachment are intended solely for the addressee >> and may contain confidential information. If you have received this >> message in error, please contact the sender and delete the email and >> attachment. >> >> Any views or opinions expressed by the author of this email do not >> necessarily reflect the views of the University of Nottingham. Email >> communications with the University of Nottingham may be monitored >> where permitted by law. >> >> >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From deligu at di.unito.it Fri Nov 22 17:39:47 2019 From: deligu at di.unito.it (Ugo de'Liguoro) Date: Fri, 22 Nov 2019 17:39:47 +0100 Subject: [Agda] ITRS 2020 Call for contributions Message-ID: <79677c95-ac82-d93c-1af9-f9efc72ee924@di.unito.it> TRS 2020 Call for contributions Tenth Workshop on Intersection Types and Related Systems 6 March 2020, Turin Affiliated with Types 2020 Web: http://www.di.unito.it/~deligu/ITRS2020/ Aims and Scope Intersection types were introduced near the end of the 1970s to overcome the limitations of Curry's type assignment system and to provide a characterization of the strongly normalizing terms of the Lambda Calculus. The key idea is to introduce an intersection type constructor ? such that a term of type t ? s can be used at both type t and s within the same context. This provides a finite polymorphism where various, even unrelated, types of the term are listed explicitly, differently from the more widely used universally quantified types where the polymorphic type is the common schema which stands for its various type instances. As a consequence, more terms (all and only the normalizing terms) can be typed than with universal polymorphism. Although intersection types were initially intended for use in analyzing and/or synthesizing lambda models as well as in analyzing normalization properties, over the last twenty years the scope of the research on intersection types and related systems has broadened in many directions. Restricted (and more manageable) forms have been investigated, such as refinement types. Type systems based on intersection type theory have been extensively studied for practical purposes, such as program analysis and higher-order model checking. The dual notion of union types turned out to be quite useful for programming languages. Finally, the behavioural approach to types, which can give a static specification of computational properties, has become central in the most recent research on type theory. The ITRS 2020 workshop aims to bring together researchers working on both the theory and practical applications of systems based on intersection types and related approaches. Possible topics for submitted papers include, but are not limited to: * Formal properties of systems with intersection types. * Results for related systems, such as union types, refinement types, or singleton types. * Applications to lambda calculus, pi-calculus and similar systems. * Applications for programming languages, program analysis, and program verification. * Applications for other areas, such as database query languages and program extraction from proofs. * Related approaches using behavioural/intensional types and/or denotational semantics to characterize computational properties. * Quantitative refinements of intersection types. ITRS workshops have been held every two years; Information about the previous events is available at the ITRS home page. Invited Speaker: * Jeremy Siek? (Indiana University Bloomington) Contributed talks: Authors are invited to submit an abstract (2 pages bibliography excluded) in PDF format, through EasyChair. Publishing of a full paper is planned in post-proceedings to appear in EPTCS, therefore we recommend using the EPTCS macro package to prepare submissions. Informal proceedings will be made available at the workshop. Program committee: * Ugo de' Liguoro (Turin University) * Jeremy Siek? (Indiana University Bloomington) * Andrej Dudenhefner (Saarland University) * Antonio Bucciarelli (Universit? Paris Diderot) * Daniel de Carvalho (Innopolis University) * Kazushige Terui (Kyoto University) * Silvia Ghilezan (University of Novi Sad) Important Dates: Abstract submission: 10 January, 2020 Author notification: 1 February, 2020 Final version: 15 February, 2020 Workshop: 6 March, 2020 Organizer Ugo de' Liguoro (Universit? di Torino, Italy) Steering Committee Mariangiola Dezani-Ciancaglini (Universit? di Torino, Italy) Jakob Rehof (University of Dortmund, Germany) Joe Wells (Heriot-Watt University, Scotland) -- Ugo de'Liguoro Associate Professor Dept. of Computer Science University of Torino Corso Svizzera 185, 10149, Torino (Italy) phone +39 011 6706766 - fax +39 011 751603 -------------- next part -------------- An HTML attachment was scrubbed... URL: From deligu at di.unito.it Fri Nov 22 17:40:57 2019 From: deligu at di.unito.it (Ugo de'Liguoro) Date: Fri, 22 Nov 2019 17:40:57 +0100 Subject: [Agda] TYPES 2020 - Call for contributions Message-ID: TYPES 2020 - Call for contributions 26th International Conference on Types for Proofs and Programs 2 - 5 March 2020, Turin Web: https://types2020.di.unito.it/ Torino, Italy BACKGROUND The TYPES meetings are a forum to present new and on-going work in all aspects of type theory and its applications, especially in formalised and computer assisted reasoning and computer programming. The TYPES areas of interest include, but are not limited to: * foundations of type theory and constructive mathematics; * applications of type theory; * dependently typed programming; * industrial uses of type theory technology; * meta-theoretic studies of type systems; * proof assistants and proof technology; * automation in computer-assisted reasoning; * links between type theory and functional programming; * formalizing mathematics using type theory. We encourage talks proposing new ways of applying type theory. In the spirit of workshops, talks may be based on newly published papers, work submitted for publication, but also work in progress. The EUTypes Cost Action CA15123 (eutypes.cs.ru.nl) focuses on the same research topics as TYPES and partially sponsors the TYPES Conference: Part of the program is organised under the auspices of EUTypes. INVITED SPEAKERS * Sara Negri (University of Helsinki) * Pierre Marie-P?drot (Inria Rennes-Bretagne-Atlantique) * Ulrik Buchhotlz (Technische Universit?t Darmstadt) * Leonardo de Moura (RISE-Microsoft Research) CONTRIBUTED TALKS We solicit contributed talks: Selection of those will be based on extended abstracts/short papers of 2 pp (not including bibliography) formatted with easychair.cls. The submission site is https://easychair.org/conferences/?conf=types2020. Important dates: * abstract submission: 10 January 2020, anywhere on Earth * notification of acceptance/rejection: 1 February 2020 * camera-ready version of abstract: 15 February 2020 Camera-ready versions of the accepted contributions will be published in an informal book of abstracts for distribution at the workshop. POST-PROCEEDINGS Similarly to TYPES 2011 and TYPES 2013-2019, a post-proceedings volume will be published in the Leibniz International Proceedings in Informatics (LIPIcs) series. Submission to that volume will be open to everyone. PROGRAMME COMMITTEE * Stefano Berardi (Universit? di Torino) (co-chair) * Ugo de? Liguoro (Universit? di Torino) (chair) * Marino Miculan (Universit? di Udine) * Marc Bezem (University of Bergen) * Gilles Dowek (INRIA ? ENS Paris-Saclay) * Takeshi Tsukada (University of Tokyo) * Jos? Esp?rito Santo (University of Minho) * Herman Geuvers (Radboud University Nijmegen) * Ralph Matthes (IRIT ? CNRS and University of Toulouse) * Henning Basold (Universiteit Leiden) * Aleksy Schubert (University of Warsaw) * Anton Setzer (University of Swansea) * Thorsten Altenkirch (University of Nottingham) * Silvia Ghilezan (Univerity of Novi Sad) * ?tienne Miquey INRIA, (University of Nantes) * Elaine Pimentel (Federal University of Rio Grande do Norte) * Tarmo Uustalu (Reykjavik University) * Alexandre Miquel (University of Montevideo) * Thierry Coquand (Chalmers University of Technology) CONTACT Email: ugo.deliguoro at unito.it Organisers: Ugo de'Liguoro (University of Turin, chair) Stefano Berardi (University of Turin) -- Ugo de'Liguoro Associate Professor Dept. of Computer Science University of Torino Corso Svizzera 185, 10149, Torino (Italy) phone +39 011 6706766 - fax +39 011 751603 -------------- next part -------------- An HTML attachment was scrubbed... URL: From P.Achten at cs.ru.nl Tue Nov 26 10:25:55 2019 From: P.Achten at cs.ru.nl (Peter Achten) Date: Tue, 26 Nov 2019 10:25:55 +0100 Subject: [Agda] [TFP'20] draft paper deadline open (January 10 2020) Trends in Functional Programming 2020, 13-14 February, Krakow, Poland Message-ID: <8c9e1df2-1b74-67d7-1964-a46a3166d459@cs.ru.nl> ------------------------------------------------------------------------- ???????????????????? Third call for papers ??????? 21st Symposium on Trends in Functional Programming ????????????????????????? tfp2020.org ------------------------------------------------------------------------- Did you miss the deadline to submit a paper to Trends in Functional Programming http://cse.chalmers.se/~rjmh/tfp/? No worries -- it's not too late! Submission is open until January 10th 2020, for a presentation slot at the event and post-symposium reviewing. The symposium on Trends in Functional Programming (TFP) is an international forum for researchers with interests in all aspects of functional programming, taking a broad view of current and future trends in the area. It aspires to be a lively environment for presenting the latest research results, and other contributions. * TFP is moving to new winter dates, to provide an FP forum in between the ? annual ICFP events. * TFP offers a supportive reviewing process designed to help less experienced ? authors succeed, with two rounds of review, both before and after the ? symposium itself. Authors have an opportunity to address reviewers' concerns ? before final decisions on publication in the proceedings. * TFP offers two "best paper" awards, the John McCarthy award for best paper, ? and the David Turner award for best student paper. * This year we are particularly excited to co-locate with Lambda Days in ? beautiful Krakow. Lambda Days is a vibrant developer conference with hundreds ? of attendees and a lively programme of talks on functional programming in ? practice. TFP will be held in the same venue, and participants will be able ? to session-hop between the two events. Important Dates --------------- Submission deadline for pre-symposium review:?? 15th November, 2019? -- passed -- Submission deadline for draft papers:?????????? 10th January, 2020 Symposium dates:??????????????????????????????? 13-14th February, 2020 Visit tfp2020.org for more information. From joey.eremondi at gmail.com Thu Nov 28 07:06:23 2019 From: joey.eremondi at gmail.com (Joey Eremondi) Date: Wed, 27 Nov 2019 22:06:23 -0800 Subject: [Agda] Instance Search fails with parameterized modules? Message-ID: I'm hitting errors I don't understand with instance search, and I've boiled it down to a (fairly) minimal example: module Minimal where open import Relation.Binary.PropositionalEquality open import Agda.Primitive module A where record ToDyn {l} (TheDyn : Set l) (a : Set l) : Set l where field toDyn : a -> TheDyn fromDyn : TheDyn -> a open ToDyn {{...}} public module B (DynB : ? (l) -> Set l) where open A record GType (l) : Set (lsuc l) where field ~_ : Set l {{dynInst}} : ToDyn (DynB l) ~_ open GType public toG : ? {l} -> (t : Set l) -> {{dinst : ToDyn (DynB l) t}} -> GType l toG t {{dinst}} = record {~_ = t ; dynInst = dinst} module C (DynC : ? (l) -> Set l) where open A open B DynC record GPi {l1 l2} (dom : GType l1) (cod : ~ dom -> GType l2) : Set (l1 ? l2) where field apply : (x : ~ dom) -> ~ (cod x) setPi : ? {l1 l2} -> (dom : Set l1) -> (cod : ( dom) -> Set l2) -> {{ idom2 : ToDyn (DynC l1) dom}} -> {{ icod2 : {x : dom} -> ToDyn (DynC l2) (cod x)}} -> Set (l1 ? l2) setPi {l1} {l2} dom cod {{idom2}} {{icod2}} = GPi (toG dom ) ? x ? toG (cod x) module D (DynD : ? (l) -> Set l) where open A open B DynD open C DynD data Nat : Set where NZ : Nat NS : Nat -> Nat instance unwrapDynInst : ? {l} { a : GType l} -> ToDyn (DynD l) (~ a) unwrapDynInst {l} {record { ~_ = ~_ ; dynInst = dynInst }} = dynInst someFun : {{_ : ToDyn (DynD lzero) Nat}} -> setPi Nat (\ _ -> Nat) someFun = {!!} I've got four modules: * Module A defines a record (i.e. typeclass) with some functions * Module B defines an existential type along with the class from module A * Module C defines Pi types over these existential types * Module D tries to construct a function of this Pi type You can run the code yourself, but on Agda 2.6.0.1 I get the following error: Failed to solve the following constraints: Resolve instance argument _icod2_66 : (DynD? : (l : Level) ? Set l) ? _ = z : ToDyn (DynD? lzero) Nat ? {x : Nat} ? ToDyn (DynD? lzero) Nat Candidates DynD : ToDyn (@2 lzero) Nat ? {l} ? unwrapDynInst : {l : Level} {a : GType l} ? ToDyn (@4 l) (~ a) Resolve instance argument _idom2_65 : (DynD? : (l : Level) ? Set l) ? _ = z : ToDyn (DynD? lzero) Nat ? ? ToDyn (DynD? lzero) Nat Candidates _ : ToDyn (DynD lzero) Nat ? {l} ? unwrapDynInst : {l : Level} {a : GType l} ? ToDyn (DynD l) (~ a) And here's my confusion: it's looking for ToDyn (DynD? lzero) Nat and it has a candidate ToDyn (DynD lzero) Nat. So, what is the subscript 1 on DynD? Why does it think there are two different versions of DynD, that it doesn't unify? Is this a bug, or behaviour I just don't understand? And is there a way to work around this without manually writing the instances everywhere (which defeats the point of instance arguments)? Thanks! -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Thu Nov 28 08:47:58 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Thu, 28 Nov 2019 08:47:58 +0100 Subject: [Agda] Instance Search fails with parameterized modules? In-Reply-To: References: Message-ID: The subscript is to avoid shadowing the module parameter DynD. The problem here is that there are multiple possible candidates for the instance goals. In the first case both DynD and unwrapDynInst are possible, and in the second case both the unnamed ToDyn argument and unwrapDynInst. If you don't make unwrapDynInst `instance` it works. / Ulf On Thu, Nov 28, 2019 at 7:06 AM Joey Eremondi wrote: > I'm hitting errors I don't understand with instance search, and I've > boiled it down to a (fairly) minimal example: > > module Minimal where > > open import Relation.Binary.PropositionalEquality > > open import Agda.Primitive > > module A where > record ToDyn {l} (TheDyn : Set l) (a : Set l) : Set l where > field > toDyn : a -> TheDyn > fromDyn : TheDyn -> a > > open ToDyn {{...}} public > > > module B (DynB : ? (l) -> Set l) where > > open A > record GType (l) : Set (lsuc l) where > field > ~_ : Set l > {{dynInst}} : ToDyn (DynB l) ~_ > > open GType public > > toG : ? {l} -> (t : Set l) -> {{dinst : ToDyn (DynB l) t}} -> GType l > toG t {{dinst}} = record {~_ = t ; dynInst = dinst} > > > module C (DynC : ? (l) -> Set l) where > open A > open B DynC > > record GPi {l1 l2} (dom : GType l1) (cod : ~ dom -> GType l2) : Set (l1 ? > l2) where > field > apply : (x : ~ dom) -> ~ (cod x) > > setPi : ? {l1 l2} -> (dom : Set l1) -> (cod : ( dom) -> Set l2) -> > {{ idom2 : ToDyn (DynC l1) dom}} -> {{ icod2 : {x : dom} -> ToDyn (DynC > l2) (cod x)}} -> Set (l1 ? l2) > setPi {l1} {l2} dom cod {{idom2}} {{icod2}} = GPi (toG dom ) ? x ? toG > (cod x) > > > > module D (DynD : ? (l) -> Set l) where > open A > open B DynD > open C DynD > > data Nat : Set where > NZ : Nat > NS : Nat -> Nat > > instance > unwrapDynInst : ? {l} { a : GType l} -> ToDyn (DynD l) (~ a) > unwrapDynInst {l} {record { ~_ = ~_ ; dynInst = dynInst }} = dynInst > > someFun : {{_ : ToDyn (DynD lzero) Nat}} -> setPi Nat (\ _ -> Nat) > someFun = {!!} > > > > I've got four modules: > * Module A defines a record (i.e. typeclass) with some functions > * Module B defines an existential type along with the class from module A > * Module C defines Pi types over these existential types > * Module D tries to construct a function of this Pi type > > You can run the code yourself, but on Agda 2.6.0.1 I get the following > error: > > Failed to solve the following constraints: > Resolve instance argument > _icod2_66 > : (DynD? : (l : Level) ? Set l) ? _ = z : ToDyn (DynD? lzero) Nat ? > {x : Nat} ? > ToDyn (DynD? lzero) Nat > Candidates > DynD : ToDyn (@2 lzero) Nat > ? {l} ? unwrapDynInst : > {l : Level} {a : GType l} ? ToDyn (@4 l) (~ a) > Resolve instance argument > _idom2_65 > : (DynD? : (l : Level) ? Set l) > ? _ = z : ToDyn (DynD? lzero) Nat ? ? > ToDyn (DynD? lzero) Nat > Candidates > _ : ToDyn (DynD lzero) Nat > ? {l} ? unwrapDynInst : > {l : Level} {a : GType l} ? ToDyn (DynD l) (~ a) > > > And here's my confusion: it's looking for ToDyn (DynD? lzero) Nat and it > has a candidate ToDyn (DynD lzero) Nat. > > So, what is the subscript 1 on DynD? Why does it think there are two > different versions of DynD, that it doesn't unify? Is this a bug, or > behaviour I just don't understand? And is there a way to work around this > without manually writing the instances everywhere (which defeats the point > of instance arguments)? > > Thanks! > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From joey.eremondi at gmail.com Thu Nov 28 09:02:45 2019 From: joey.eremondi at gmail.com (Joey Eremondi) Date: Thu, 28 Nov 2019 00:02:45 -0800 Subject: [Agda] Instance Search fails with parameterized modules? In-Reply-To: References: Message-ID: Perfect, I didn't realize it was a "too many candidates" problem, I just thought it was stuck on unsolved metas. Thanks! On Wed, Nov 27, 2019 at 11:48 PM Ulf Norell wrote: > The subscript is to avoid shadowing the module parameter DynD. > > The problem here is that there are multiple possible candidates for the > instance goals. In the first case both DynD and unwrapDynInst are possible, > and in the second case both the unnamed ToDyn argument and unwrapDynInst. > > If you don't make unwrapDynInst `instance` it works. > > / Ulf > > On Thu, Nov 28, 2019 at 7:06 AM Joey Eremondi > wrote: > >> I'm hitting errors I don't understand with instance search, and I've >> boiled it down to a (fairly) minimal example: >> >> module Minimal where >> >> open import Relation.Binary.PropositionalEquality >> >> open import Agda.Primitive >> >> module A where >> record ToDyn {l} (TheDyn : Set l) (a : Set l) : Set l where >> field >> toDyn : a -> TheDyn >> fromDyn : TheDyn -> a >> >> open ToDyn {{...}} public >> >> >> module B (DynB : ? (l) -> Set l) where >> >> open A >> record GType (l) : Set (lsuc l) where >> field >> ~_ : Set l >> {{dynInst}} : ToDyn (DynB l) ~_ >> >> open GType public >> >> toG : ? {l} -> (t : Set l) -> {{dinst : ToDyn (DynB l) t}} -> GType l >> toG t {{dinst}} = record {~_ = t ; dynInst = dinst} >> >> >> module C (DynC : ? (l) -> Set l) where >> open A >> open B DynC >> >> record GPi {l1 l2} (dom : GType l1) (cod : ~ dom -> GType l2) : Set (l1 >> ? l2) where >> field >> apply : (x : ~ dom) -> ~ (cod x) >> >> setPi : ? {l1 l2} -> (dom : Set l1) -> (cod : ( dom) -> Set l2) -> >> {{ idom2 : ToDyn (DynC l1) dom}} -> {{ icod2 : {x : dom} -> ToDyn (DynC >> l2) (cod x)}} -> Set (l1 ? l2) >> setPi {l1} {l2} dom cod {{idom2}} {{icod2}} = GPi (toG dom ) ? x ? toG >> (cod x) >> >> >> >> module D (DynD : ? (l) -> Set l) where >> open A >> open B DynD >> open C DynD >> >> data Nat : Set where >> NZ : Nat >> NS : Nat -> Nat >> >> instance >> unwrapDynInst : ? {l} { a : GType l} -> ToDyn (DynD l) (~ a) >> unwrapDynInst {l} {record { ~_ = ~_ ; dynInst = dynInst }} = dynInst >> >> someFun : {{_ : ToDyn (DynD lzero) Nat}} -> setPi Nat (\ _ -> Nat) >> someFun = {!!} >> >> >> >> I've got four modules: >> * Module A defines a record (i.e. typeclass) with some functions >> * Module B defines an existential type along with the class from module A >> * Module C defines Pi types over these existential types >> * Module D tries to construct a function of this Pi type >> >> You can run the code yourself, but on Agda 2.6.0.1 I get the following >> error: >> >> Failed to solve the following constraints: >> Resolve instance argument >> _icod2_66 >> : (DynD? : (l : Level) ? Set l) ? _ = z : ToDyn (DynD? lzero) Nat ? >> {x : Nat} ? >> ToDyn (DynD? lzero) Nat >> Candidates >> DynD : ToDyn (@2 lzero) Nat >> ? {l} ? unwrapDynInst : >> {l : Level} {a : GType l} ? ToDyn (@4 l) (~ a) >> Resolve instance argument >> _idom2_65 >> : (DynD? : (l : Level) ? Set l) >> ? _ = z : ToDyn (DynD? lzero) Nat ? ? >> ToDyn (DynD? lzero) Nat >> Candidates >> _ : ToDyn (DynD lzero) Nat >> ? {l} ? unwrapDynInst : >> {l : Level} {a : GType l} ? ToDyn (DynD l) (~ a) >> >> >> And here's my confusion: it's looking for ToDyn (DynD? lzero) Nat and it >> has a candidate ToDyn (DynD lzero) Nat. >> >> So, what is the subscript 1 on DynD? Why does it think there are two >> different versions of DynD, that it doesn't unify? Is this a bug, or >> behaviour I just don't understand? And is there a way to work around this >> without manually writing the instances everywhere (which defeats the point >> of instance arguments)? >> >> Thanks! >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Dominique.Devriese at vub.be Mon Dec 2 16:05:56 2019 From: Dominique.Devriese at vub.be (Dominique DEVRIESE) Date: Mon, 2 Dec 2019 15:05:56 +0000 Subject: [Agda] Call for Participation: Certified Programs and Proofs (CPP 2020) Message-ID: Certified Programs and Proofs (CPP 2020) - Early registration deadline: 18 December 2019 - Getting a visa: https://popl20.sigplan.org/attending/Visa - Registration: https://popl20.sigplan.org/attending/Registration - Accommodation: https://popl20.sigplan.org/venue/POPL-2020-venue Certified Programs and Proofs (CPP) is an international conference on practical and theoretical topics in all areas that consider certification as an essential paradigm for their work. Certification here means formal, mechanized verification of some sort, preferably with the production of independently checkable certificates. CPP spans areas of computer science, mathematics, logics, and education. CPP 2020 will be held on 20-21 January 2020 in New Orleans, Louisiana, United States and will be co-located with POPL 2020. CPP 2020 is sponsored by ACM SIGPLAN, in cooperation with ACM SIGLOG. For more information about this edition and the CPP series, please visit https://popl20.sigplan.org/home/CPP-2020 ### Invited Speakers Adam Chlipala (MIT CSAIL) and Grigore Rosu (UIUC and Runtime Verification) ### Accepted papers The list of accepted papers is available at https://popl20.sigplan.org/home/CPP-2020#event-overview ### Conference dinner This year CPP will feature a (highly subsidized) conference dinner in a local restaurant for which we encourage you to sign up when registering by choosing the CPP+ option. This is possible thanks to our generous industrial supporters (list still expected to grow a bit): https://popl20.sigplan.org/home/CPP-2020#About ### Contact For any questions please contact the PC chairs: Jasmin Blanchette , Catalin Hritcu From andrew.pitts at cl.cam.ac.uk Tue Dec 3 12:38:58 2019 From: andrew.pitts at cl.cam.ac.uk (Andrew Pitts) Date: Tue, 3 Dec 2019 11:38:58 +0000 Subject: [Agda] Agda2 emacs mode - yellow highlighting Message-ID: I have a question about how to use the Agda2 emacs mode more effectively in the case that one?s Agda code goes yellow because of overzealous use of implicit arguments. If I select a piece of yellow-highlighted code, is there a command to replace the region with code in which all implicit arguments are made made visible as holes? For example, in f : {A : Set}{a : A} ? A f {A} {a} = a g : (A : Set) ? A ? A g A a = f the last ?f? will be highlighted in yellow and I would like a key stroke that causes the code to become f : {A : Set}{a : A} ? A f {A} {a} = a g : (A : Set) ? A ? A g A a = f {?} {?} Supplementary question: there is a global command in Agda2 C-c C-x C-h (Toggle display of hidden arguments) Can someone give me an example of what it is supposed to do? (I naively thought it might display all the hidden arguments.) Andy Pitts From yotamdvir at mail.tau.ac.il Tue Dec 3 18:04:17 2019 From: yotamdvir at mail.tau.ac.il (Yotam Dvir) Date: Tue, 3 Dec 2019 19:04:17 +0200 Subject: [Agda] Small Kernel Message-ID: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> Hi there, I am interested in the soundness of Agda as a proof-assistant. To my understanding Agda development veers more in the direction of interesting abstractions and advanced programming features, at the cost of less solid foundations. Is this understanding correct? How close is Agda to having a so-called "small kernel?, and how does it compare to other proof-assistants such as Coq and HOL Light? (You are also welcome to answer on?cstheory.stackexchange .) Thanks in advance! -------------- next part -------------- An HTML attachment was scrubbed... URL: From Jesper at sikanda.be Wed Dec 4 10:13:30 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 4 Dec 2019 10:13:30 +0100 Subject: [Agda] Small Kernel In-Reply-To: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> Message-ID: Hi Yotam, It is true that Agda currently has a much shakier foundation than say Coq or Lean. It does have an internal term syntax that could be seen as a core language ( https://github.com/agda/agda/blob/master/src/full/Agda/Syntax/Internal.hs). It even has an independent typechecker for internal syntax ( https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/CheckInternal.hs ). However, this story is far from complete because it takes the signature of defined types and functions for granted. In particular, functions by dependent pattern matching are represented as case trees that need to pass coverage checking and termination checking, which means those checks are also part of Agda's 'trusted core'. In our ICFP paper last year ( https://dl.acm.org/citation.cfm?doid=3243631.3236770) Andreas and I describe a potential core language for case trees, but so far there is no independent typechecker for case trees as we have for internal syntax (one day...). Another important part of Agda's trusted core is the conversion checker, which in Agda shares most code with the constraint solver ( https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion.hs), while in Coq it's two separate algorithms. Recently I added the possibility to run the conversion checker in 'pure' mode which is guarateed to be free of side-effects ( https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion/Pure.hs ). As you can see, there is bits and pieces that could be part of a core language of Agda, but no real coherent story yet. In general, any attempt to build a core language will also be an exercise in selecting which features of Agda should be included and which ones should not (e.g. irrelevance, sized types, prop, rewrite rules, cubical, ...). Yet this selection of various features would've been much harder to implement if Agda already had a core language from the beginning, so not having a core language has advantages as well as disadvantages. All the best, Jesper On Tue, Dec 3, 2019 at 6:05 PM Yotam Dvir wrote: > Hi there, > > I am interested in the soundness of Agda as a proof-assistant. To my > understanding Agda development veers more in the direction of interesting > abstractions and advanced programming features, at the cost of less solid > foundations. > > Is this understanding correct? > How close is Agda to having a so-called "small kernel?, and how does it > compare to other proof-assistants such as Coq and HOL Light? > > (You are also welcome to answer on cstheory.stackexchange > .) > > Thanks in advance! > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From xuanrui at nagoya-u.jp Wed Dec 4 10:17:43 2019 From: xuanrui at nagoya-u.jp (Xuanrui Qi) Date: Wed, 04 Dec 2019 18:17:43 +0900 Subject: [Agda] Small Kernel In-Reply-To: References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> Message-ID: <5e12075bac410f251bb8ea707991c7dd94bc1043.camel@nagoya-u.jp> Hi Jesper, Hi Yotam, I wonder, how large, in total, are those components that could be considered part of the "kernel" of Agda? I know that Coq's kernel is quite large (>10000 lines OCaml), but Agda seems a much lighter system than Coq so I expect the number to be much smaller? Best, Xuanrui On Wed, 2019-12-04 at 10:13 +0100, Jesper Cockx wrote: > Hi Yotam, > > It is true that Agda currently has a much shakier foundation than say > Coq or Lean. It does have an internal term syntax that could be seen > as a core language ( > https://github.com/agda/agda/blob/master/src/full/Agda/Syntax/Internal.hs > ). It even has an independent typechecker for internal syntax ( > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/CheckInternal.hs > ). > > However, this story is far from complete because it takes the > signature of defined types and functions for granted. In particular, > functions by dependent pattern matching are represented as case trees > that need to pass coverage checking and termination checking, which > means those checks are also part of Agda's 'trusted core'. In our > ICFP paper last year ( > https://dl.acm.org/citation.cfm?doid=3243631.3236770) Andreas and I > describe a potential core language for case trees, but so far there > is no independent typechecker for case trees as we have for internal > syntax (one day...). > > Another important part of Agda's trusted core is the conversion > checker, which in Agda shares most code with the constraint solver ( > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion.hs > ), while in Coq it's two separate algorithms. Recently I added the > possibility to run the conversion checker in 'pure' mode which is > guarateed to be free of side-effects ( > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion/Pure.hs > ). > > As you can see, there is bits and pieces that could be part of a core > language of Agda, but no real coherent story yet. In general, any > attempt to build a core language will also be an exercise in > selecting which features of Agda should be included and which ones > should not (e.g. irrelevance, sized types, prop, rewrite rules, > cubical, ...). Yet this selection of various features would've been > much harder to implement if Agda already had a core language from the > beginning, so not having a core language has advantages as well as > disadvantages. > > All the best, > Jesper > > On Tue, Dec 3, 2019 at 6:05 PM Yotam Dvir > wrote: > > Hi there, > > > > I am interested in the soundness of Agda as a proof-assistant. To > > my understanding Agda development veers more in the direction of > > interesting abstractions and advanced programming features, at the > > cost of less solid foundations. > > > > Is this understanding correct? > > How close is Agda to having a so-called "small kernel?, and how > > does it compare to other proof-assistants such as Coq and HOL > > Light? > > > > (You are also welcome to answer on cstheory.stackexchange.) > > > > Thanks in advance! > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From Jesper at sikanda.be Wed Dec 4 10:35:20 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Wed, 4 Dec 2019 10:35:20 +0100 Subject: [Agda] Small Kernel In-Reply-To: <5e12075bac410f251bb8ea707991c7dd94bc1043.camel@nagoya-u.jp> References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> <5e12075bac410f251bb8ea707991c7dd94bc1043.camel@nagoya-u.jp> Message-ID: Hi Xuanrui, It's very hard to measure because as I said, most parts of Agda's core don't have an independent typechecker, so all the code is mixed up with the elaboration of user code to internal syntax. -- Jesper On Wed, Dec 4, 2019 at 10:18 AM Xuanrui Qi wrote: > Hi Jesper, Hi Yotam, > > I wonder, how large, in total, are those components that could be > considered part of the "kernel" of Agda? I know that Coq's kernel is > quite large (>10000 lines OCaml), but Agda seems a much lighter system > than Coq so I expect the number to be much smaller? > > Best, > Xuanrui > > On Wed, 2019-12-04 at 10:13 +0100, Jesper Cockx wrote: > > Hi Yotam, > > > > It is true that Agda currently has a much shakier foundation than say > > Coq or Lean. It does have an internal term syntax that could be seen > > as a core language ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/Syntax/Internal.hs > > ). It even has an independent typechecker for internal syntax ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/CheckInternal.hs > > ). > > > > However, this story is far from complete because it takes the > > signature of defined types and functions for granted. In particular, > > functions by dependent pattern matching are represented as case trees > > that need to pass coverage checking and termination checking, which > > means those checks are also part of Agda's 'trusted core'. In our > > ICFP paper last year ( > > https://dl.acm.org/citation.cfm?doid=3243631.3236770) Andreas and I > > describe a potential core language for case trees, but so far there > > is no independent typechecker for case trees as we have for internal > > syntax (one day...). > > > > Another important part of Agda's trusted core is the conversion > > checker, which in Agda shares most code with the constraint solver ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion.hs > > ), while in Coq it's two separate algorithms. Recently I added the > > possibility to run the conversion checker in 'pure' mode which is > > guarateed to be free of side-effects ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion/Pure.hs > > ). > > > > As you can see, there is bits and pieces that could be part of a core > > language of Agda, but no real coherent story yet. In general, any > > attempt to build a core language will also be an exercise in > > selecting which features of Agda should be included and which ones > > should not (e.g. irrelevance, sized types, prop, rewrite rules, > > cubical, ...). Yet this selection of various features would've been > > much harder to implement if Agda already had a core language from the > > beginning, so not having a core language has advantages as well as > > disadvantages. > > > > All the best, > > Jesper > > > > On Tue, Dec 3, 2019 at 6:05 PM Yotam Dvir > > wrote: > > > Hi there, > > > > > > I am interested in the soundness of Agda as a proof-assistant. To > > > my understanding Agda development veers more in the direction of > > > interesting abstractions and advanced programming features, at the > > > cost of less solid foundations. > > > > > > Is this understanding correct? > > > How close is Agda to having a so-called "small kernel?, and how > > > does it compare to other proof-assistants such as Coq and HOL > > > Light? > > > > > > (You are also welcome to answer on cstheory.stackexchange.) > > > > > > Thanks in advance! > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From a.j.rouvoet at gmail.com Wed Dec 4 14:45:26 2019 From: a.j.rouvoet at gmail.com (a.j.rouvoet) Date: Wed, 4 Dec 2019 14:45:26 +0100 Subject: [Agda] Small Kernel In-Reply-To: References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> <5e12075bac410f251bb8ea707991c7dd94bc1043.camel@nagoya-u.jp> Message-ID: Hi Xuanrui, But it would probably be fair to say (I think?) that if we were to count, it would be extremely surprising if Agda's core turns out to be lighter than Coq's. Much of the apparent weight of Coq is in the tactic language, various typeclass mechanisms etc, which are distinctly not part of the kernel. Best, Arjen On 12/4/19 10:35 AM, Jesper Cockx wrote: > Hi Xuanrui, > > It's very hard to measure because as I said, most parts of Agda's core > don't have an independent typechecker, so all the code is mixed up > with the elaboration of user code to internal syntax. > > -- Jesper > > On Wed, Dec 4, 2019 at 10:18 AM Xuanrui Qi > wrote: > > Hi Jesper, Hi Yotam, > > I wonder, how large, in total, are those components that could be > considered part of the "kernel" of Agda? I know that Coq's kernel is > quite large (>10000 lines OCaml), but Agda seems a much lighter system > than Coq so I expect the number to be much smaller? > > Best, > Xuanrui > > On Wed, 2019-12-04 at 10:13 +0100, Jesper Cockx wrote: > > Hi Yotam, > > > > It is true that Agda currently has a much shakier foundation > than say > > Coq or Lean. It does have an internal term syntax that could be seen > > as a core language ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/Syntax/Internal.hs > > ). It even has an independent typechecker for internal syntax ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/CheckInternal.hs > > ). > > > > However, this story is far from complete because it takes the > > signature of defined types and functions for granted. In particular, > > functions by dependent pattern matching are represented as case > trees > > that need to pass coverage checking and termination checking, which > > means those checks are also part of Agda's 'trusted core'. In our > > ICFP paper last year ( > > https://dl.acm.org/citation.cfm?doid=3243631.3236770) Andreas and I > > describe a potential core language for case trees, but so far there > > is no independent typechecker for case trees as we have for internal > > syntax (one day...). > > > > Another important part of Agda's trusted core is the conversion > > checker, which in Agda shares most code with the constraint solver ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion.hs > > ), while in Coq it's two separate algorithms. Recently I added the > > possibility to run the conversion checker in 'pure' mode which is > > guarateed to be free of side-effects ( > > > https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion/Pure.hs > > ). > > > > As you can see, there is bits and pieces that could be part of a > core > > language of Agda, but no real coherent story yet. In general, any > > attempt to build a core language will also be an exercise in > > selecting which features of Agda should be included and which ones > > should not (e.g. irrelevance, sized types, prop, rewrite rules, > > cubical, ...). Yet this selection of various features would've been > > much harder to implement if Agda already had a core language > from the > > beginning, so not having a core language has advantages as well as > > disadvantages. > > > > All the best, > > Jesper > > > > On Tue, Dec 3, 2019 at 6:05 PM Yotam Dvir > > > > wrote: > > > Hi there, > > > > > > I am interested in the soundness of Agda as a proof-assistant. To > > > my understanding Agda development veers more in the direction of > > > interesting abstractions and advanced programming features, at the > > > cost of less solid foundations. > > > > > > Is this understanding correct? > > > How close is Agda to having a so-called "small kernel?, and how > > > does it compare to other proof-assistants such as Coq and HOL > > > Light? > > > > > > (You are also welcome to answer on cstheory.stackexchange.) > > > > > > Thanks in advance! > > > _______________________________________________ > > > Agda mailing list > > > Agda at lists.chalmers.se > > > https://lists.chalmers.se/mailman/listinfo/agda > > > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Wed Dec 4 14:58:59 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 4 Dec 2019 14:58:59 +0100 Subject: [Agda] Agda2 emacs mode - yellow highlighting In-Reply-To: References: Message-ID: <23291c57-83b3-ec72-e436-99fcdf1661d0@cse.gu.se> On 2019-12-03 12:38, Andrew Pitts wrote: > If I select a piece of yellow-highlighted code, is there a command to > replace the region with code in which all implicit arguments are made > made visible as holes? No. I guess this would be impossible to implement, because there could be ambiguous constructors or fields in the region. > Supplementary question: there is a global command in Agda2 > > C-c C-x C-h (Toggle display of hidden arguments) > > Can someone give me an example of what it is supposed to do? (I > naively thought it might display all the hidden arguments.) After you have turned on this option the output of various commands includes hidden arguments. Note that the setting resets to the default when the file is loaded. -- /NAD From liang.ting.chen.tw at gmail.com Wed Dec 4 16:17:30 2019 From: liang.ting.chen.tw at gmail.com (Liang-Ting Chen) Date: Wed, 4 Dec 2019 15:17:30 +0000 Subject: [Agda] Small Kernel In-Reply-To: References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> <5e12075bac410f251bb8ea707991c7dd94bc1043.camel@nagoya-u.jp> Message-ID: Hi, The discussion remained me that there is a specification of Agda: https://github.com/agda/agda-spec It is, however, never complete and has been still for about 3 years ... Does anyone know if there is any progress or intention of working this? Cheers, Liang-Ting On Wed, 4 Dec 2019 at 13:45, a.j.rouvoet wrote: > Hi Xuanrui, > > But it would probably be fair to say (I think?) that if we were to count, > it would be extremely surprising if Agda's core turns out to be lighter > than Coq's. Much of the apparent weight of Coq is in the tactic language, > various typeclass mechanisms etc, which are distinctly not part of the > kernel. > > Best, > > Arjen > On 12/4/19 10:35 AM, Jesper Cockx wrote: > > Hi Xuanrui, > > It's very hard to measure because as I said, most parts of Agda's core > don't have an independent typechecker, so all the code is mixed up with the > elaboration of user code to internal syntax. > > -- Jesper > > On Wed, Dec 4, 2019 at 10:18 AM Xuanrui Qi wrote: > >> Hi Jesper, Hi Yotam, >> >> I wonder, how large, in total, are those components that could be >> considered part of the "kernel" of Agda? I know that Coq's kernel is >> quite large (>10000 lines OCaml), but Agda seems a much lighter system >> than Coq so I expect the number to be much smaller? >> >> Best, >> Xuanrui >> >> On Wed, 2019-12-04 at 10:13 +0100, Jesper Cockx wrote: >> > Hi Yotam, >> > >> > It is true that Agda currently has a much shakier foundation than say >> > Coq or Lean. It does have an internal term syntax that could be seen >> > as a core language ( >> > >> https://github.com/agda/agda/blob/master/src/full/Agda/Syntax/Internal.hs >> > ). It even has an independent typechecker for internal syntax ( >> > >> https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/CheckInternal.hs >> > ). >> > >> > However, this story is far from complete because it takes the >> > signature of defined types and functions for granted. In particular, >> > functions by dependent pattern matching are represented as case trees >> > that need to pass coverage checking and termination checking, which >> > means those checks are also part of Agda's 'trusted core'. In our >> > ICFP paper last year ( >> > https://dl.acm.org/citation.cfm?doid=3243631.3236770) Andreas and I >> > describe a potential core language for case trees, but so far there >> > is no independent typechecker for case trees as we have for internal >> > syntax (one day...). >> > >> > Another important part of Agda's trusted core is the conversion >> > checker, which in Agda shares most code with the constraint solver ( >> > >> https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion.hs >> > ), while in Coq it's two separate algorithms. Recently I added the >> > possibility to run the conversion checker in 'pure' mode which is >> > guarateed to be free of side-effects ( >> > >> https://github.com/agda/agda/blob/master/src/full/Agda/TypeChecking/Conversion/Pure.hs >> > ). >> > >> > As you can see, there is bits and pieces that could be part of a core >> > language of Agda, but no real coherent story yet. In general, any >> > attempt to build a core language will also be an exercise in >> > selecting which features of Agda should be included and which ones >> > should not (e.g. irrelevance, sized types, prop, rewrite rules, >> > cubical, ...). Yet this selection of various features would've been >> > much harder to implement if Agda already had a core language from the >> > beginning, so not having a core language has advantages as well as >> > disadvantages. >> > >> > All the best, >> > Jesper >> > >> > On Tue, Dec 3, 2019 at 6:05 PM Yotam Dvir >> > wrote: >> > > Hi there, >> > > >> > > I am interested in the soundness of Agda as a proof-assistant. To >> > > my understanding Agda development veers more in the direction of >> > > interesting abstractions and advanced programming features, at the >> > > cost of less solid foundations. >> > > >> > > Is this understanding correct? >> > > How close is Agda to having a so-called "small kernel?, and how >> > > does it compare to other proof-assistants such as Coq and HOL >> > > Light? >> > > >> > > (You are also welcome to answer on cstheory.stackexchange.) >> > > >> > > Thanks in advance! >> > > _______________________________________________ >> > > Agda mailing list >> > > Agda at lists.chalmers.se >> > > https://lists.chalmers.se/mailman/listinfo/agda >> > >> > _______________________________________________ >> > Agda mailing list >> > Agda at lists.chalmers.se >> > https://lists.chalmers.se/mailman/listinfo/agda >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > _______________________________________________ > Agda mailing listAgda at lists.chalmers.sehttps://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -- ? LT -------------- next part -------------- An HTML attachment was scrubbed... URL: From herminie.pagel at gmail.com Thu Dec 5 13:05:18 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Thu, 5 Dec 2019 13:05:18 +0100 Subject: [Agda] syntactic sugar parameters Message-ID: Hi there, when following the kripke semantics file of the Iowa Agda Library: https://github.com/cedille/ial/blob/master/kripke-semantics.agda#L37 we find in L37: sample-pf = ImpliesI{$ "p"} (AndI (Assume{[]}) (Assume)) which is a proof of type [] ? Implies ($ "p") (And ($ "p") ($ "p")) i tested sample-pf-alt = ImpliesI (AndI (Assume{[]} {($ "p")}) (Assume{[]} {($ "p")})) and results also in a proof of the same type What kind of syntactic sugar is making agda understand sample-pf without explicitly telling Assume its parameters in the first place? best, herminie -------------- next part -------------- An HTML attachment was scrubbed... URL: From nad at cse.gu.se Thu Dec 5 13:22:16 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Thu, 5 Dec 2019 13:22:16 +0100 Subject: [Agda] usage of a definition In-Reply-To: References: Message-ID: <39186088-f852-ba92-f3c6-9c44a3f33ec6@cse.gu.se> On 2019-11-12 19:44, Jason -Zhong Sheng- Hu wrote: > is there a way to search the usage of a definition? by usage, I mean a > definition is used inside of the bodies of other definitions, not just > in types. note that it is more complicated than a string search, as it > involves searching imported modules as well as usages of infix > operators. No, I don't think we have implemented something like that. -- /NAD From hancock at fastmail.fm Thu Dec 5 14:24:12 2019 From: hancock at fastmail.fm (Peter Hancock) Date: Thu, 5 Dec 2019 13:24:12 +0000 Subject: [Agda] Small Kernel In-Reply-To: References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> Message-ID: <46d4836b-0696-6046-97fe-412bc353f15a@fastmail.fm> On 04/12/2019 09:13, Jesper Cockx wrote: > However, this story is far from complete because it takes the signature of > defined types and functions for granted. In particular, functions by > dependent pattern matching are represented as case trees that need to pass > coverage checking and termination checking, which means those checks are > also part of Agda's 'trusted core'. Interesting. Would it be right to say that coverage checking is simple in comparison to termination checking (which is after all undecidable, in principle)? This brought something to mind. With many datatypes (not codata) there is a canonical eliminator. You could press a button to have it generated and type-checked for you. (This might even be useful). Imaginably, you might also get the canonical anamorphism from a declaration of codata; or even fancier gadgetry. A masochist or an idiot or a compiler from user syntax might try to write all programs using just these canonical eliminators as the only source of structural induction and/or recursion, even case-splits. That might be something like a core language, or imaginable (if sometimes nasty/prolix) "assembly code". One advantage of full pattern matching is avoiding programs with piles of deeply nested case distinctions. An example is a proof of transitivity, where pattern matching allows tr tr' : (a b c : fm) -> Tr a b c tr in0 in0 in0 in0* = id tr (inS z) (inS z') (inS z'') (inS* z z' ab) (inS* z' z'' bc) = inS* z z'' (tr z z' z'' ab bc) The (20 line) proof using just canonical eliminators took me horribly many hours to figure out. It is computationally horrible. It works only because the last clause of Tr is an equation. It seems that there is something like ex-falso-quodlibet lurking in the corners of full pattern matching. To be in a core-language, I wonder if it should be spelled out by explicitly using a boolean universe, or something ... Hank From Jesper at sikanda.be Thu Dec 5 14:48:16 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Thu, 5 Dec 2019 14:48:16 +0100 Subject: [Agda] Small Kernel In-Reply-To: <46d4836b-0696-6046-97fe-412bc353f15a@fastmail.fm> References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> <46d4836b-0696-6046-97fe-412bc353f15a@fastmail.fm> Message-ID: Hi Peter, Interesting. Would it be right to say that coverage checking > is simple in comparison to termination checking > (which is after all undecidable, in principle)? > In general, coverage checking is just as undecidable as termination checking, because it requires checking emptiness of a given type to determine whether a case can be omitted. Agda uses inaccessible patterns to recover a decidable fragment of coverage, which is similar to using a particular criterion for termination like structural descent or size-change termination. This brought something to mind. With many datatypes (not codata) there > is a canonical eliminator. You could press a button to have it > generated and type-checked for you. (This might even be useful). > Imaginably, you might also get the canonical anamorphism from > a declaration of codata; or even fancier gadgetry. It should be possible to use Agda's reflection machinery to write a macro that automatically generates the eliminator for a given datatype (in a certain subset of all datatypes supported by Agda), and similarly you could generate general principles to work with coinductive types like you mention. A masochist or an idiot or a compiler from user syntax > might try to write all programs using just these canonical > eliminators as the only source of structural induction and/or recursion, > even > case-splits. The translation from dependent pattern matching to eliminators is automated in the Equations plugin for Coq, so there is no need for masochism. A true masochist could try to reimplement Equations as an Agda macro. Personally I would be more interested to do such a project using a type-safe reflection interface such as levitation. But even with such an automatic translation, I would suspect that you still want to keep around the case tree representation of the function, for efficient evaluation if nothing else. It seems that there is something like ex-falso-quodlibet > lurking in the corners of full pattern matching. It makes use of the conflict rule from Conor's "constructions on constructors" to eliminate impossible cases, is this what you meant? -- Jesper On Thu, Dec 5, 2019 at 2:25 PM Peter Hancock wrote: > On 04/12/2019 09:13, Jesper Cockx wrote: > > > However, this story is far from complete because it takes the signature > of > > defined types and functions for granted. In particular, functions by > > dependent pattern matching are represented as case trees that need to > pass > > coverage checking and termination checking, which means those checks are > > also part of Agda's 'trusted core'. > > Interesting. Would it be right to say that coverage checking > is simple in comparison to termination checking > (which is after all undecidable, in principle)? > > This brought something to mind. With many datatypes (not codata) there > is a canonical eliminator. You could press a button to have it > generated and type-checked for you. (This might even be useful). > Imaginably, you might also get the canonical anamorphism from > a declaration of codata; or even fancier gadgetry. > > A masochist or an idiot or a compiler from user syntax > might try to write all programs using just these canonical > eliminators as the only source of structural induction and/or recursion, > even > case-splits. That might be something like a core language, or > imaginable (if sometimes nasty/prolix) "assembly code". > > One advantage of full pattern matching is avoiding > programs with piles of deeply nested case distinctions. > An example is a proof of transitivity, where > pattern matching allows > > tr tr' : (a b c : fm) -> Tr a b c > tr in0 in0 in0 in0* = id > tr (inS z) (inS z') (inS z'') (inS* z z' ab) (inS* z' z'' bc) > = inS* z z'' (tr z z' z'' ab bc) > > The (20 line) proof using just canonical eliminators took me > horribly many hours to figure out. It is computationally horrible. > It works only because the last clause of Tr is an equation. > > It seems that there is something like ex-falso-quodlibet > lurking in the corners of full pattern matching. > To be in a core-language, I wonder if it should be spelled > out by explicitly using a boolean universe, or something ... > > Hank > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From hancock at fastmail.fm Thu Dec 5 15:52:10 2019 From: hancock at fastmail.fm (Peter Hancock) Date: Thu, 5 Dec 2019 14:52:10 +0000 Subject: [Agda] Small Kernel In-Reply-To: References: <2425A3EC-1062-4F1C-87AD-77CAD17748B4@mail.tau.ac.il> <46d4836b-0696-6046-97fe-412bc353f15a@fastmail.fm> Message-ID: On 05/12/2019 13:48, Jesper Cockx wrote: > It seems that there is something like ex-falso-quodlibet >> lurking in the corners of full pattern matching. > > > It makes use of the conflict rule from Conor's "constructions on > constructors" to eliminate impossible cases, is this what you meant? Something like that, though I don't know Conor's stuff. I'm just speculating about the mechanics of case splitting in a state of ignorance and senescence. vaguely: I think of the eliminated case clauses as being replaced by efq terms mapping into the type required where they occur. I probably think that a comparison between constructor tags generates a boolean value c=c'. On a clash, this gets mapped by T : bool -> Set to N0, to be the source of a typeable efq (N0-eliminator) term. On a match, it gates the correct case clause. Perhaps I'm wondering why checking for unhandled cases can't be automated, and disturbed by coverage/nakedness checking being in bed with termination checking. However, I've never really understood full-blooded pattern-matching. -- Peter From selinger at mathstat.dal.ca Thu Dec 5 16:47:38 2019 From: selinger at mathstat.dal.ca (selinger at mathstat.dal.ca) Date: Thu, 5 Dec 2019 15:47:38 +0000 Subject: [Agda] Small Kernel In-Reply-To: <46d4836b-0696-6046-97fe-412bc353f15a@fastmail.fm> Message-ID: Hi Peter, most of your questions are answered in the paper "Eliminating Dependent Pattern Matching" by Goguen, McBride, and McKinna. The paper explains how to translate programs that are defined by recursion and full pattern matching into a core language using only induction principles (i.e., canonical eliminators, which can be generated from datatype definitions). It also explains why adding inaccessible patterns makes (a certain fragement of) coverage decidable. -- Peter Peter Hancock wrote: > > On 04/12/2019 09:13, Jesper Cockx wrote: > > > However, this story is far from complete because it takes the signature of > > defined types and functions for granted. In particular, functions by > > dependent pattern matching are represented as case trees that need to pass > > coverage checking and termination checking, which means those checks are > > also part of Agda's 'trusted core'. > > Interesting. Would it be right to say that coverage checking > is simple in comparison to termination checking > (which is after all undecidable, in principle)? > > This brought something to mind. With many datatypes (not codata) there > is a canonical eliminator. You could press a button to have it > generated and type-checked for you. (This might even be useful). > Imaginably, you might also get the canonical anamorphism from > a declaration of codata; or even fancier gadgetry. > > A masochist or an idiot or a compiler from user syntax > might try to write all programs using just these canonical > eliminators as the only source of structural induction and/or recursion, even > case-splits. That might be something like a core language, or > imaginable (if sometimes nasty/prolix) "assembly code". > > One advantage of full pattern matching is avoiding > programs with piles of deeply nested case distinctions. > An example is a proof of transitivity, where > pattern matching allows > > tr tr' : (a b c : fm) -> Tr a b c > tr in0 in0 in0 in0* = id > tr (inS z) (inS z') (inS z'') (inS* z z' ab) (inS* z' z'' bc) > = inS* z z'' (tr z z' z'' ab bc) > > The (20 line) proof using just canonical eliminators took me > horribly many hours to figure out. It is computationally horrible. > It works only because the last clause of Tr is an equation. > > It seems that there is something like ex-falso-quodlibet > lurking in the corners of full pattern matching. > To be in a core-language, I wonder if it should be spelled > out by explicitly using a boolean universe, or something ... > > Hank > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From nad at cse.gu.se Fri Dec 6 10:09:40 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Fri, 6 Dec 2019 10:09:40 +0100 Subject: [Agda] syntactic sugar parameters In-Reply-To: References: Message-ID: On 2019-12-05 13:05, Herminie Pagel wrote: > What kind of syntactic sugar is making agda understand sample-pf > without explicitly telling Assume its parameters in the first place? Agda uses unification to infer these arguments. Ulf Norell's PhD thesis discusses this topic (but Agda has evolved quite a bit since the thesis was published). -- /NAD From james.wood.100 at strath.ac.uk Fri Dec 6 11:23:36 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Fri, 6 Dec 2019 10:23:36 +0000 Subject: [Agda] syntactic sugar parameters In-Reply-To: References: Message-ID: <29061383-e744-ea01-14e3-fc5d6e00a3f6@strath.ac.uk> More recently, here is the documentation on the syntactic aspects: https://agda.readthedocs.io/en/v2.6.0.1/language/implicit-arguments.html . Unfortunately, it seems not to document how elided terms are inferred, but as Nils says, the usual way is unification. To get a feel of this, it might be instructive to delete the body of `sample-pf` and build up the term yourself. You'll see where the checker can figure things out and where it can't. James On 06/12/2019 09:09, Nils Anders Danielsson wrote: > On 2019-12-05 13:05, Herminie Pagel wrote: >> What kind of syntactic sugar is making agda understand sample-pf >> without explicitly telling Assume its parameters in the first place? > > Agda uses unification to infer these arguments. Ulf Norell's PhD thesis > discusses this topic (but Agda has evolved quite a bit since the thesis > was published). > From mechvel at scico.botik.ru Tue Dec 10 21:04:02 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Tue, 10 Dec 2019 23:04:02 +0300 Subject: [Agda] list comprehensions Message-ID: Dear Agda developers, list comprehensions is a nice feature in Haskell. For example, I write [((i, j), p) | ((i, p), j) <- items] to transform a list of "triples". But in Agda, one has to write map (\item ? ((proj? $ proj? item , proj? item) , (proj? $ proj? item) ) ) items This code is difficult to perceive. Well, I do not know how of difficult can it be to introduce list comprehensions to Agda (to language? to library?). Regards, ------ Sergei From james.wood.100 at strath.ac.uk Wed Dec 11 00:55:20 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Tue, 10 Dec 2019 23:55:20 +0000 Subject: [Agda] list comprehensions In-Reply-To: References: Message-ID: <1c19735d-56d6-3fb1-96b7-91090f9a0fa1@strath.ac.uk> Dear Sergei, List comprehensions are very similar to do notation, which Agda already supports. See: https://agda.readthedocs.io/en/v2.6.0.1/language/syntactic-sugar.html#do-notation Your example would then look like the following. do ((i , p) , j) ? items return ((i , j) , p) However, note that if you have to make proofs about this expression, it's likely that it's going to be slightly more difficult to work with than the version using `map`. The do notation desugars and computes to concat (map (? i ? f i ? []) items) where f is the function that rearranges the tuple. In other words, we are concatenating lots of one-item lists, rather than just having a list. With this in mind, you might want to keep the `map` version, but do some things to make it nicer. The most direct is the `? where` syntax, that allows pattern matching. map (? where ((i , p) , j) ? ((i , j) , p)) items This can cause issues when you want to repeat this expression somewhere else, in which case you can rewrite to something more verbose. map (? item ? let ((i , p) , j) = item in ((i , j) , p)) items I believe in the development version of Agda, it's even possible to write the following. map (? ((i , p) , j) ? ((i , j) , p)) items This will behave identically to the `let` version. Regards, James On 10/12/2019 20:04, mechvel at scico.botik.ru wrote: > Dear Agda developers, > > list comprehensions is a nice feature in Haskell. > For example, I write > ??? [((i, j), p) | ((i, p), j) <- items] > > to transform a list of "triples". > But in Agda, one has to write > ??? map (\item ? ((proj? $ proj? item , proj? item) , > ????????????????? (proj? $ proj? item) > ???????????????? ) > ??????? ) items > > This code is difficult to perceive. > Well, I do not know how of difficult can it be to introduce list > comprehensions to Agda > (to language? to library?). > > Regards, > > ------ > Sergei > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From carette at mcmaster.ca Wed Dec 11 02:44:49 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Tue, 10 Dec 2019 20:44:49 -0500 Subject: [Agda] list comprehensions In-Reply-To: References: Message-ID: <0feab036-83ad-e9a8-7627-37d4bb13e423@mcmaster.ca> On top of the do notation mentioned earlier, you can also do map (? where ((x , y) , z) ? ((x , z) , y)) items as well as map (? { ((x , y) , z) ? ((x , z) , y) }) items Jacques On 2019-Dec.-10 15:04 , mechvel at scico.botik.ru wrote: > Dear Agda developers, > > list comprehensions is a nice feature in Haskell. > For example, I write > ??? [((i, j), p) | ((i, p), j) <- items] > > to transform a list of "triples". > But in Agda, one has to write > ??? map (\item ? ((proj? $ proj? item , proj? item) , > ????????????????? (proj? $ proj? item) > ???????????????? ) > ??????? ) items > > This code is difficult to perceive. > Well, I do not know how of difficult can it be to introduce list > comprehensions to Agda > (to language? to library?). > > Regards, > > ------ > Sergei > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mrakgr at gmail.com Wed Dec 11 10:27:24 2019 From: mrakgr at gmail.com (Marko Grdinic) Date: Wed, 11 Dec 2019 10:27:24 +0100 Subject: [Agda] How to prove termination for the iterated halving function over the rationals? Message-ID: https://stackoverflow.com/questions/59263530/how-to-prove-that-the-halving-function-over-positive-rationals-always-has-an-exi Sorry for being pushy, but lately I've gotten an interest in rational math and I really want some input from the experts here regarding how to prove termination of the above. Implementing the function was easy, but proving the termination seems impossible so at the very least I need to understand whether that impression is right or not. Silence as the reply just has too many possible interpretations to deal with. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Wed Dec 11 11:48:54 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Wed, 11 Dec 2019 13:48:54 +0300 Subject: [Agda] list comprehensions In-Reply-To: <1c19735d-56d6-3fb1-96b7-91090f9a0fa1@strath.ac.uk> References: <1c19735d-56d6-3fb1-96b7-91090f9a0fa1@strath.ac.uk> Message-ID: On 2019-12-11 02:55, James Wood wrote: > Dear Sergei, > > [..] > > The most direct is the `? where` syntax, that allows pattern matching. > > map (? where ((i , p) , j) ? ((i , j) , p)) items > > This can cause issues when you want to repeat this expression somewhere > else, in which case you can rewrite to something more verbose. > > map (? item ? let ((i , p) , j) = item in ((i , j) , p)) items > > I believe in the development version of Agda, it's even possible to > write the following. > > map (? ((i , p) , j) ? ((i , j) , p)) items Any of this will do. Thank you. Sorry, I must have recalled this myself. -- SM From mechvel at scico.botik.ru Wed Dec 11 11:59:35 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Wed, 11 Dec 2019 13:59:35 +0300 Subject: [Agda] list comprehensions In-Reply-To: References: <1c19735d-56d6-3fb1-96b7-91090f9a0fa1@strath.ac.uk> Message-ID: On 2019-12-11 13:48, mechvel at scico.botik.ru wrote: > On 2019-12-11 02:55, James Wood wrote: >> Dear Sergei, >> >> [..] >> > >> The most direct is the `? where` syntax, that allows pattern matching. >> >> map (? where ((i , p) , j) ? ((i , j) , p)) items >> >> This can cause issues when you want to repeat this expression >> somewhere >> else, in which case you can rewrite to something more verbose. >> >> map (? item ? let ((i , p) , j) = item in ((i , j) , p)) items >> >> I believe in the development version of Agda, it's even possible to >> write the following. >> >> map (? ((i , p) , j) ? ((i , j) , p)) items > > Any of this will do. > [..] And the latter version is much nicer. -- SM From nad at cse.gu.se Wed Dec 11 15:47:17 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Wed, 11 Dec 2019 15:47:17 +0100 Subject: [Agda] How to prove termination for the iterated halving function over the rationals? In-Reply-To: References: Message-ID: On 2019-12-11 10:27, Marko Grdinic wrote: > Sorry for being pushy, but lately I've gotten an interest in rational > math and I really want some input from the experts here regarding how > to prove termination of the above. Implementing the function was easy, > but proving the termination seems impossible so at the very least I > need to understand whether that impression is right or not. Silence as > the reply just has too many possible interpretations to deal with. You are trying to compute a number n such that b / 2 ^ n < a for some rational number a strictly between 0 and the rational number b, right? Your current approach is to try 1, then 2, then 3, and so on. This is reminiscent of Markov's principle, which should not be provable in Agda. Thus I suggest that you try a different approach that makes more "active use" of the inputs a and b. -- /NAD From aaron-stump at uiowa.edu Wed Dec 11 23:28:34 2019 From: aaron-stump at uiowa.edu (Aaron Stump) Date: Wed, 11 Dec 2019 16:28:34 -0600 Subject: [Agda] postdoc position Message-ID: <9beef984-d110-2465-8a3a-c93aec032205@uiowa.edu> Dear Agda list, I am advertising a postdoctoral position working on Cedille (cedille.github.io), whose backend is written mostly in Agda.? The position would begin February 1 or at the absolute latest March 1, and last for one year.? Topics of interest include coinduction, higher-order abstract syntax, optimal beta-reduction, strong functional programming, and possibly implicit computational complexity (in the setting of lambda calculus).? Applicants should email me a copy of their CV and names of 2 people I could contact for letters of recommendation.? Or feel free to inquire further about the position before this step. Best wishes, Aaron From marko at dimjasevic.net Thu Dec 12 08:08:24 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Thu, 12 Dec 2019 08:08:24 +0100 Subject: [Agda] Contributing: good first issues Message-ID: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> Dear Agda community, I'm interested in contributing to Agda in code. So far I contributed tiny documentation fixes, but now I'd be interested in making bug fixes and implementing small improvements or features. Therefore, I'd appreciate a pointer to good first issues or equivalent. HACKING.md [1] doesn't seem to have pointers to such issues nor could I find related information anywhere else in the documentation. Do you use a particular label in the issue tracker for good first issues? I'm looking for something that could hopefully be done in a day or two. I've been using Haskell professionally for a year and a half so you can expect some proficiency. [1] https://github.com/agda/agda/blob/master/HACKING.md -- Regards, Marko Dimja?evi? https://dimjasevic.net/marko PGP key ID: 056E61A6F3B6C9323049DBF9565EE9641503F0AA Learn email self-defense! https://emailselfdefense.fsf.org -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From herminie.pagel at gmail.com Fri Dec 13 09:04:31 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Fri, 13 Dec 2019 09:04:31 +0100 Subject: [Agda] Contributing: good first issues In-Reply-To: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> References: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> Message-ID: I had a similar issue and probably more people also. I guess it would be great to have a kind of contributing guide for newcomers to agda depending on their interests, backgrounds, objectives... A newcomer should be able to self-assess where does she stand now regarding agda, the things to which she can contribute right away, and maybe to be able to discover a learning path to where she wants to be in the future. Such a contributing guide should do the job. I don't know if something is on the way in that direction or even if it is possible/desirable to extend the user base of agda. Best! herminie Am Do., 12. Dez. 2019 um 08:08 Uhr schrieb Marko Dimja?evi? < marko at dimjasevic.net>: > Dear Agda community, > > I'm interested in contributing to Agda in code. So far I contributed > tiny documentation fixes, but now I'd be interested in making bug fixes > and implementing small improvements or features. Therefore, I'd > appreciate a pointer to good first issues or equivalent. HACKING.md [1] > doesn't seem to have pointers to such issues nor could I find related > information anywhere else in the documentation. > > Do you use a particular label in the issue tracker for good first > issues? > > I'm looking for something that could hopefully be done in a day or two. > I've been using Haskell professionally for a year and a half so you can > expect some proficiency. > > > [1] https://github.com/agda/agda/blob/master/HACKING.md > > > -- > Regards, > Marko Dimja?evi? > https://dimjasevic.net/marko > PGP key ID: 056E61A6F3B6C9323049DBF9565EE9641503F0AA > Learn email self-defense! https://emailselfdefense.fsf.org > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From ulf.norell at gmail.com Fri Dec 13 11:01:33 2019 From: ulf.norell at gmail.com (Ulf Norell) Date: Fri, 13 Dec 2019 11:01:33 +0100 Subject: [Agda] Contributing: good first issues In-Reply-To: References: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> Message-ID: There is a `difficulty: easy` label on GitHub (no guarantees that it's always accurate though). Otherwise, my advice would be to find something that you want to work on (rather than something that's easy, but uninteresting), and start digging into the code base, asking questions here or on the agda-dev [1] mailing list. We don't have an "Introduction to the Agda code base" in the user manual, but it would certainly be a useful resource. / Ulf [1] https://lists.chalmers.se/mailman/listinfo/agda-dev On Fri, Dec 13, 2019 at 9:04 AM Herminie Pagel wrote: > I had a similar issue and probably more people also. > > I guess it would be great to have a kind of contributing guide for > newcomers to agda depending on their interests, backgrounds, objectives... > > A newcomer should be able to self-assess where does she stand now > regarding agda, the things to which she can contribute right away, and > maybe to be able to discover a learning path to where she wants to be in > the future. Such a contributing guide should do the job. I don't know if > something is on the way in that direction or even if it is > possible/desirable to extend the user base of agda. > > Best! herminie > > > Am Do., 12. Dez. 2019 um 08:08 Uhr schrieb Marko Dimja?evi? < > marko at dimjasevic.net>: > >> Dear Agda community, >> >> I'm interested in contributing to Agda in code. So far I contributed >> tiny documentation fixes, but now I'd be interested in making bug fixes >> and implementing small improvements or features. Therefore, I'd >> appreciate a pointer to good first issues or equivalent. HACKING.md [1] >> doesn't seem to have pointers to such issues nor could I find related >> information anywhere else in the documentation. >> >> Do you use a particular label in the issue tracker for good first >> issues? >> >> I'm looking for something that could hopefully be done in a day or two. >> I've been using Haskell professionally for a year and a half so you can >> expect some proficiency. >> >> >> [1] https://github.com/agda/agda/blob/master/HACKING.md >> >> >> -- >> Regards, >> Marko Dimja?evi? >> https://dimjasevic.net/marko >> PGP key ID: 056E61A6F3B6C9323049DBF9565EE9641503F0AA >> Learn email self-defense! https://emailselfdefense.fsf.org >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From marko at dimjasevic.net Fri Dec 13 23:39:59 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Fri, 13 Dec 2019 23:39:59 +0100 Subject: [Agda] Contributing: good first issues In-Reply-To: References: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> Message-ID: <10978760ade7977091579a10e14f46733bfa0895.camel@dimjasevic.net> Dear Ulf, On Fri, 2019-12-13 at 11:01 +0100, Ulf Norell wrote: > There is a `difficulty: easy` label on GitHub (no guarantees that > it's always accurate though). Thank you! I will take a look. In case someone else is trying to find such issues, here is a search link: https://github.com/agda/agda/labels/difficulty%3A%20easy > Otherwise, my advice would be to find something that you want to work > on (rather than something that's > easy, but uninteresting), and start digging into the code base, > asking questions here or on the agda-dev [1] > mailing list. Your suggestion is plausible, though the case with me is that I have a very vague understanding of what one could work on when it comes to Agda. That's why I'd like to start with anything, which will at the very least get me familiar with things that you and other regular contributors take for granted. With time and a handful of tasks under my belt, the hope is I will have a better understanding of Agda and where I could go. I've subscribed to the agda-dev mailing list. Kind regards, Marko Dimja?evi? -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From tarmo at cs.ioc.ee Mon Dec 16 00:45:16 2019 From: tarmo at cs.ioc.ee (Tarmo Uustalu) Date: Mon, 16 Dec 2019 01:45:16 +0200 Subject: [Agda] First ETAPS Doctoral Dissertation Award Message-ID: <20191216014516.329a060e@cs.ioc.ee> First ETAPS Doctoral Dissertation Award ================================= The European Joint Conferences on Theory and Practice of Software Association has established a Doctoral Dissertation Award to promote and recognize outstanding dissertations in the research areas covered by the four main ETAPS conferences (ESOP, FASE, FoSSaCS, and TACAS). Doctoral dissertations are evaluated with respect to originality, relevance, and impact to the field, as well as the quality of writing. The award winner will receive a monetary prize and will be recognized at the ETAPS Banquet. Eligibility ----------- Eligible for the award is any PhD student whose doctoral dissertation is in the scope of the ETAPS conferences and who completed their doctoral degree at a European academic institution in the period from January 1st, 2019 to December 31st, 2019. Nominations ----------- Award candidates should be nominated by their supervisor. Members of the Award Committee are not allowed to nominate their own PhD students for the award. Nominations consist of a single PDF file (extension .pdf) containing: * name and email address of the candidate * a short curriculum vitae of the candidate * name and email address of the supervisor * an endorsement letter from the supervisor * the final version of the doctoral dissertation * institution and department that has awarded the doctorate * a document certifying that the doctoral degree was successfully completed within the eligibility period * a report from at least one examiner of the dissertation who is not affiliated with the candidate's institution All documents must be written in English. Nominations are welcome regardless of whether results that are part of the dissertation have been published at ETAPS. Nominations should be submitted via EasyChair: https://easychair.org/conferences/?conf=etapsdda2020 The deadline for nominations is January 19th, 2020. Award Committee --------------- Caterina Urban (chair) Amal Ahmed (representing ESOP) Dirk Beyer (representing TACAS) Andrew Pitts (representing FoSSaCS) Perdita Stevens (representing FASE) Marieke Huisman From nad at cse.gu.se Mon Dec 16 12:34:39 2019 From: nad at cse.gu.se (Nils Anders Danielsson) Date: Mon, 16 Dec 2019 12:34:39 +0100 Subject: [Agda] Contributing: good first issues In-Reply-To: References: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> Message-ID: <434f853c-f24b-15d5-6d07-a1f781ffe22a@cse.gu.se> On 2019-12-13 11:01, Ulf Norell wrote: > There is a `difficulty: easy` label on GitHub (no guarantees that it's > always accurate though). There is also "help wanted". -- /NAD From Graham.Hutton at nottingham.ac.uk Tue Dec 17 11:25:47 2019 From: Graham.Hutton at nottingham.ac.uk (Graham Hutton) Date: Tue, 17 Dec 2019 10:25:47 +0000 Subject: [Agda] 10 PhD studentships in Nottingham Message-ID: <7519897A-A8A1-4BF0-82DA-02E9AC9B64D4@nottingham.ac.uk> Dear all, The School of Computer Science at the University of Nottingham is seeking applications for 10 fully-funded international PhD studentships: https://tinyurl.com/10-phds-2020 Applicants in the area of the Functional Programming Laboratory (https://tinyurl.com/fp-notts) are strongly encouraged! If you are interested in applying, please contact a potential supervisor as soon as possible (the application deadline is 17th January): Thorsten Altenkirch - constructive logic, proof assistants, homotopy type theory, category theory, lambda calculus. Venanzio Capretta - type theory, mathemZZatical logic, corecursive structures, proof assistants, category theory, epistemic logic. Graham Hutton - not taking on any new students this year, but you may find these notes useful: https://tinyurl.com/scbkxkr Henrik Nilsson - functional reactive programming, domain- specific languages, generalised notions of computation. These positions are only open to international applicants. An advert for UK/EU applicants will be posted in January 2020. Best wishes, Graham +-----------------------------------------------------------+ 10 Fully-Funded International PhD Studentships School of Computer Science University of Nottingham, UK https://tinyurl.com/10-phds-2020 Applications are invited for 10 fully-funded international PhD studentships in the School of Computer Science at the University of Nottingham, starting on 1st October 2020. The topics for the studentships are open, but should relate to the interests of one of the School?s research groups: Agents Lab; Computational Optimisation and Learning Lab; Computer Vision Lab; Functional Programming; Intelligent Modelling and Analysis; Mixed Reality Lab; Data Driven Algorithms, Systems and Design and Uncertainty in Data and Decision Making The studentships are for three and a half years and include a stipend of ?15,009 per year and tuition fees. Applicants are normally expected to have a first-class Masters or Bachelors degree in Computer Science or a related discipline, and must obtain the support of a potential supervisor in the School prior to submitting their application. Initial contact with supervisors should be made at least two weeks prior to the closing date for applications. Successful applicants are expected to apply for an International VC Scholarship. Informal enquiries may be addressed to Kathleen.Fennemore at nottingham.ac.uk. To apply, please submit the following items by email to: Marc.Williams at nottingham.ac.uk: (1) a copy of your CV, including your actual or expected degree class(es), and results of all University examinations; (2) an example of your technical writing, such as a project report or dissertation; (3) contact details for two academic referees. (4) a research proposal ? max 2 x sides A4 You may also include a covering letter but this is optional. Closing date for applications: Friday 17 January 2020. +-----------------------------------------------------------+ This message and any attachment are intended solely for the addressee and may contain confidential information. If you have received this message in error, please contact the sender and delete the email and attachment. Any views or opinions expressed by the author of this email do not necessarily reflect the views of the University of Nottingham. Email communications with the University of Nottingham may be monitored where permitted by law. From casperbp at gmail.com Tue Dec 17 23:07:49 2019 From: casperbp at gmail.com (Casper Bach Poulsen) Date: Tue, 17 Dec 2019 23:07:49 +0100 Subject: [Agda] PEPM 2020 Call for Participation Message-ID: CALL FOR PARTICIPATION Workshop on PARTIAL EVALUATION AND PROGRAM MANIPULATION (PEPM 2020) https://popl20.sigplan.org/home/pepm-2020 New Orleans, USA, Monday January 20th, 2020 (co-located with POPL 2020) Registration ------------ http://popl20.sigplan.org/attending/registration Early registration deadline: **Wednesday 18th Dec 2019** Preliminary Schedule -------------------- 09:00-10:00: Keynote 1: Network Verification: Past, Present, and Future (Nate Foster) 10:30-12:30: Dependently-Typed Multi-Stage Programming Revisited (invited talk) (Atsushi Igarashi) High-Fidelity Metaprogramming with Separator Syntax Trees (Rodin Aarssen, Tijs van der Storm) Module Generation without Regret (Yuhi Sato, Yukiyoshi Kameyama, Takahisa Watanabe) GOOL: A Generic Object-Oriented Language (Jacques Carette, Brooks MacLachlan, Spencer Smith) 14:00-15:05: Keynote 2: Reasoning about Progress of Concurrent Objects (Xinyu Feng) 15:35-17:45: Frex: Free extensions for normalisation by evaluation (invited talk) (Ohad Kammar) Symbolic Bisimulation for Open and Parameterized System (Zechen Hou, Eric Madelaine) Acumen: A Domain-Specific Language for Cyber-Physical Systems (invited talk) (Walid Taha) An approach to generating text-based IDEs with syntax completion from syntax specification (Isao Sasano) Find the full schedule, abstracts of the talks, and links to papers on the PEPM2020 website: https://popl20.sigplan.org/home/pepm-2020 Looking forward to seeing you at PEPM2020, PEPM2020 chairs and PC *** Programme committee ------------------- * Andreas Abel (Chalmers U.) * Guillaume Allais (U. Strathclyde) * Nada Amin (Harvard U.) * Casper Bach Poulsen (co-chair) (TU Delft) * Patrick Bahr (Copenhagen U.) * Aggelos Biboudis (EPFL) * Olivier Danvy (National U. Singapore) * ?lvaro Garc?a-P?rez (IMDEA) * Jeremy Gibbons (Oxford U.) * Robert Gl?ck (Copenhagen U.) * Torsten Grust (U. Tubingen) * Zhenjiang Hu (co-chair) (Peking U./NII) * Hideya Iwasaki (U. Electro-Communications) * Oleg Kiselyov (Tohoku U.) * Hedehiko Masuhara (Tokyo I. Technology) * Keisuke Nakano (Tohoku U.) * Bruno Oliveira (U. Hong Kong) * Jens Palsberg (UCLA) * Jo?o Saraiva (Minho U.) * Tom Schrijvers (KU Leuven) * Eijiro Sumii (Tohoku U.) * Walid Taha (Halmstad U.) * Nobuko Yoshida (Imperial C. London) From carette at mcmaster.ca Wed Dec 18 05:02:48 2019 From: carette at mcmaster.ca (Jacques Carette) Date: Tue, 17 Dec 2019 23:02:48 -0500 Subject: [Agda] Need a hand with a proof Message-ID: <55f6a704-e6db-216c-2df8-9fe7e3228b30@mcmaster.ca> Self-contained code with one hole.? The main theorem 'List A ? ? ? (Vec A)' ought to be obvious. Certainly the two functions that witness it are; the problem is to prove left-inverse. The right-inverse is already in Data.Vec.Properties. I've tried many ideas, to no avail. Jacques module help where open import Data.List using (List; _?_; []; length) open import Data.Vec using (Vec; _?_; []; fromList; toList) open import Data.Vec.Properties using (toList?fromList; ?-injective) open import Data.Product using (?; _,_; proj?; proj?) open import Function using (_?_; _?_; _$_) open import Relation.Binary.PropositionalEquality ? using (_?_; refl; subst; cong; sym; trans) private ? variable ??? a : Level ??? A : Set a forgetting-length : {a : Level} {A : Set a} ? List A ? ? ? (Vec A) forgetting-length = record ? { f = ? xs ? length xs , fromList xs ? ; f?? = toList ? proj? ? ; cong? = ? { refl ? refl } ? ; cong? = ? { refl ? refl } ? ; inverse = left-inv , toList?fromList ? } ? where ??? length-stable : (x : ? ? (Vec A)) ? length (toList (proj? x)) ? proj? x ??? length-stable (0 , []) = refl ??? length-stable (suc i , x ? xs) = cong suc (length-stable (i , xs)) ??? left-inv : (x : ? ? (Vec A)) ? (length (toList (proj? x)) , fromList (toList (proj? x))) ? x ??? left-inv (0 , []) = refl ??? left-inv (suc n , x ? xs) = {!!} From fdhzs2010 at hotmail.com Wed Dec 18 05:22:45 2019 From: fdhzs2010 at hotmail.com (Jason -Zhong Sheng- Hu) Date: Wed, 18 Dec 2019 04:22:45 +0000 Subject: [Agda] Need a hand with a proof In-Reply-To: <55f6a704-e6db-216c-2df8-9fe7e3228b30@mcmaster.ca> References: <55f6a704-e6db-216c-2df8-9fe7e3228b30@mcmaster.ca> Message-ID: Hi Jacques, you just need to generalize over the two fields of the tuple, and then the inductive hypothesis will just work. I think the reason why it fails by matching on `left-inv (n , xs)` directly is the direction of the equality. If the function is `x ? blah` then the inductive hypothesis seems directly applicable. left-inv : (x : ? ? (Vec A)) ? (length (toList (proj? x)) , fromList (toList (proj? x))) ? x left-inv (0 , []) = refl left-inv (suc n , x ? xs) with length (toList xs) | fromList (toList xs) | left-inv (n , xs) ... | _ | _ | refl = refl Thanks, Jason Hu https://hustmphrrr.github.io/ ________________________________ From: Agda on behalf of Jacques Carette Sent: December 17, 2019 11:02 PM To: agda Subject: [Agda] Need a hand with a proof Self-contained code with one hole. The main theorem 'List A ? ? ? (Vec A)' ought to be obvious. Certainly the two functions that witness it are; the problem is to prove left-inverse. The right-inverse is already in Data.Vec.Properties. I've tried many ideas, to no avail. Jacques module help where open import Data.List using (List; _?_; []; length) open import Data.Vec using (Vec; _?_; []; fromList; toList) open import Data.Vec.Properties using (toList?fromList; ?-injective) open import Data.Product using (?; _,_; proj?; proj?) open import Function using (_?_; _?_; _$_) open import Relation.Binary.PropositionalEquality using (_?_; refl; subst; cong; sym; trans) private variable a : Level A : Set a forgetting-length : {a : Level} {A : Set a} ? List A ? ? ? (Vec A) forgetting-length = record { f = ? xs ? length xs , fromList xs ; f?? = toList ? proj? ; cong? = ? { refl ? refl } ; cong? = ? { refl ? refl } ; inverse = left-inv , toList?fromList } where length-stable : (x : ? ? (Vec A)) ? length (toList (proj? x)) ? proj? x length-stable (0 , []) = refl length-stable (suc i , x ? xs) = cong suc (length-stable (i , xs)) left-inv : (x : ? ? (Vec A)) ? (length (toList (proj? x)) , fromList (toList (proj? x))) ? x left-inv (0 , []) = refl left-inv (suc n , x ? xs) = {!!} _______________________________________________ Agda mailing list Agda at lists.chalmers.se https://lists.chalmers.se/mailman/listinfo/agda -------------- next part -------------- An HTML attachment was scrubbed... URL: From marko at dimjasevic.net Wed Dec 18 21:23:17 2019 From: marko at dimjasevic.net (Marko =?UTF-8?Q?Dimja=C5=A1evi=C4=87?=) Date: Wed, 18 Dec 2019 21:23:17 +0100 Subject: [Agda] Contributing: good first issues In-Reply-To: <434f853c-f24b-15d5-6d07-a1f781ffe22a@cse.gu.se> References: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> <434f853c-f24b-15d5-6d07-a1f781ffe22a@cse.gu.se> Message-ID: <92f5360d9718ad70bd349a3a36ffaa8dcec060d8.camel@dimjasevic.net> On Mon, 2019-12-16 at 12:34 +0100, Nils Anders Danielsson wrote: > On 2019-12-13 11:01, Ulf Norell wrote: > > There is a `difficulty: easy` label on GitHub (no guarantees that > > it's > > always accurate though). > > There is also "help wanted". Thank you! Kind regards, Marko Dimja?evi? -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 833 bytes Desc: This is a digitally signed message part URL: From herminie.pagel at gmail.com Thu Dec 19 08:50:23 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Thu, 19 Dec 2019 08:50:23 +0100 Subject: [Agda] Contributing: good first issues In-Reply-To: <92f5360d9718ad70bd349a3a36ffaa8dcec060d8.camel@dimjasevic.net> References: <46192a2d155444203ade32ae6e6b28aa24e9bcc4.camel@dimjasevic.net> <434f853c-f24b-15d5-6d07-a1f781ffe22a@cse.gu.se> <92f5360d9718ad70bd349a3a36ffaa8dcec060d8.camel@dimjasevic.net> Message-ID: The contribute page of the user manual was updated with the information of this thread: https://agda.readthedocs.io/en/latest/contribute/index.html Github has a standard label named "good first issues" for potential first-time contributors that now is empty but could also be used: https://github.com/agda/agda/labels/good%20first%20issue -- h Am Mi., 18. Dez. 2019 um 21:23 Uhr schrieb Marko Dimja?evi? < marko at dimjasevic.net>: > On Mon, 2019-12-16 at 12:34 +0100, Nils Anders Danielsson wrote: > > On 2019-12-13 11:01, Ulf Norell wrote: > > > There is a `difficulty: easy` label on GitHub (no guarantees that > > > it's > > > always accurate though). > > > > There is also "help wanted". > > > Thank you! > > > Kind regards, > Marko Dimja?evi? > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From herminie.pagel at gmail.com Thu Dec 19 09:08:47 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Thu, 19 Dec 2019 09:08:47 +0100 Subject: [Agda] agda-spec horizon Message-ID: Hi, I think that Liang-Ting was asking in the Small Kernel thread about the progress of the repository that holds the specification of Agda. As he noted, it seems not to be completed and has been still for 3 years: https://github.com/agda/agda-spec I thought it would be good to open a separate thread to update some info about this. -- h -------------- next part -------------- An HTML attachment was scrubbed... URL: From publicityifl at gmail.com Fri Dec 20 14:52:48 2019 From: publicityifl at gmail.com (Jurriaan Hage) Date: Fri, 20 Dec 2019 05:52:48 -0800 Subject: [Agda] Third call for draft papers for TFPIE 2020 (Trends in Functional Programming in Education) Message-ID: Hello, Please, find below the third call for draft papers for TFPIE 2020. Please forward these to anyone you think may be interested. Apologies for any duplicates you may receive. best regards, Jurriaan Hage Chair of TFPIE 2020 ======================================================================== TFPIE 2020 Call for papers http://www.staff.science.uu.nl/~hage0101/tfpie2020/index.html February 12th 2020, Krakow, Poland (co-located with TFP 2020 and Lambda Days) *NEW* Invited Speaker We are happy to announce the invited speaker for TFPIE 2020, Thorsten Altenkirch, who also speaks at Lambda Days. At TFPIE 2020 he shall be talking about his new book, Conceptual Programming With Python. *NEW* Registration This year TFPIE takes place outside of the Lambda Days/TFP organisation, although it takes place near their location. This means you do need to register separately for TFPIE; it also means you can register for TFPIE without registering for TFP/LambdaDays, and vice versa. Registration is mandatory for at least one author of every paper that is presented at the workshop. Only papers that have been presented at TFPIE may be submitted to the post-reviewing process. Registration is 25 euro per person. TFPIE 2020 welcomes submissions describing techniques used in the classroom, tools used in and/or developed for the classroom and any creative use of functional programming (FP) to aid education in or outside Computer Science. Topics of interest include, but are not limited to: FP and beginning CS students FP and Computational Thinking FP and Artificial Intelligence FP in Robotics FP and Music Advanced FP for undergraduates FP in graduate education Engaging students in research using FP FP in Programming Languages FP in the high school curriculum FP as a stepping stone to other CS topics FP and Philosophy The pedagogy of teaching FP FP and e-learning: MOOCs, automated assessment etc. Best Lectures - more details below In addition to papers, we are requesting best lecture presentations. What's your best lecture topic in an FP related course? Do you have a fun way to present FP concepts to novices or perhaps an especially interesting presentation of a difficult topic? In either case, please consider sharing it. Best lecture topics will be selected for presentation based on a short abstract describing the lecture and its interest to TFPIE attendees. The length of the presentation should be comparable to that of a paper. On top of the lecture itself, the presentation can also provide commentary on the lecture. Submissions Potential presenters are invited to submit an extended abstract (4-6 pages) or a draft paper (up to 20 pages) in EPTCS style. The authors of accepted presentations will have their preprints and their slides made available on the workshop's website. Papers and abstracts can be submitted via easychair at the following link: https://easychair.org/conferences/?conf=tfpie2020 . After the workshop, presenters will be invited to submit (a revised version of) their article for review. The PC will select the best articles that will be published in the Electronic Proceedings in Theoretical Computer Science (EPTCS). Articles rejected for presentation and extended abstracts will not be formally reviewed by the PC. Dates Submission deadline: January 14th 2020, Anywhere on Earth. Notification: January 17th 2020 TFPIE Registration Deadline: January 20th 2020 Workshop: February 12th 2020 Submission for formal review: April 19th 2020, Anywhere on Earth. Notification of full article: June 6th 2020 Camera ready: July 1st 2020 Program Committee Olaf Chitil - University of Kent Youyou Cong - Tokyo Institute of Technology Marko van Eekelen - Open University of the Netherlands and Radboud University Nijmegen Jurriaan Hage (Chair) - Utrecht University Marco T. Morazan - Seton Hall University, USA Sharon Tuttle - Humboldt State University, USA Janis Voigtlaender - University of Duisburg-Essen Viktoria Zsok - Eotvos Lorand University Note: information on TFP is available at http://www.cse.chalmers.se/~rjmh/tfp/ -------------- next part -------------- An HTML attachment was scrubbed... URL: From asr at eafit.edu.co Sun Dec 22 12:41:23 2019 From: asr at eafit.edu.co (Andres Sicard Ramirez) Date: Sun, 22 Dec 2019 11:41:23 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 Message-ID: Dear all, The Agda Team is very pleased to announce the first release candidate of Agda 2.6.1. We plan to release 2.6.1 in three weeks. Installation ======= The RC can be installed using the following instructions: $ cabal install https://hackage.haskell.org/package/Agda-2.6.0.1.20191219/candidate/Agda-2.6.0.1.20191219.tar.gz or $ cabal get https://hackage.haskell.org/package/Agda-2.6.0.1.20191219/candidate/Agda-2.6.0.1.20191219.tar.gz $ cd Agda-2.6.0.1.20191219.tar.gz $ cabal install GHC supported versions =============== The RC has been tested with GHC 8.8.1, 8.6.5, 8.4.4, 8.2.2 and 8.0.2. Support for GHC 7.10.3 was removed. Standard library ========== For the time being, you can use the *experimental* branch of the standard library which is compatible with the RC. This branch is available at https://github.com/agda/agda-stdlib/ What is new, fixed issues and incompatibilities ============================ https://hackage.haskell.org/package/Agda-2.6.0.1.20191219/candidate/changelog Know issues and regressions ================== There are some issues and regressions we plan to fix before the final release. See open issues with milestone 2.6.1 in the bug tracker (https://github.com/agda/agda/issues). Enjoy the RC and please test as much as possible. -- Andr?s, on behalf of the Agda Team From mechvel at scico.botik.ru Sun Dec 22 21:05:17 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sun, 22 Dec 2019 23:05:17 +0300 Subject: [Agda] =?utf-8?b?b3ZlcmxhcHBpbmcgX+KIt18sIFtd?= Message-ID: People, how does this occur that Data.List.Relation.Unary.All.Properties open-imports _?_, [] both from Data.List and from Data.List.Relation.Unary.All ? Are these constructor names so special that they are overloaded? Regards, ------ Sergei From melkon.or at gmail.com Sun Dec 22 21:11:06 2019 From: melkon.or at gmail.com (Orestis Melkonian) Date: Sun, 22 Dec 2019 20:11:06 +0000 Subject: [Agda] =?utf-8?b?b3ZlcmxhcHBpbmcgX+KIt18sIFtd?= In-Reply-To: References: Message-ID: <1191b555-9440-bb6b-a190-8179c00d3af4@gmail.com> Constructor names can overlap; the right one will be chosen on usage depending on the expected type. Note that other kind of names cannot overlap (e.g. definition names, etc..). Cheers, --OM On 22-12-19 20:05, mechvel at scico.botik.ru wrote: > People, > > how does this occur that Data.List.Relation.Unary.All.Properties > open-imports > ???????????? _?_, [] > > both from Data.List? and from? Data.List.Relation.Unary.All > ? > Are these constructor names so special that they are overloaded? > > Regards, > > ------ > Sergei > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From james.wood.100 at strath.ac.uk Sun Dec 22 21:28:46 2019 From: james.wood.100 at strath.ac.uk (James Wood) Date: Sun, 22 Dec 2019 20:28:46 +0000 Subject: [Agda] =?utf-8?b?b3ZlcmxhcHBpbmcgX+KIt18sIFtd?= In-Reply-To: <1191b555-9440-bb6b-a190-8179c00d3af4@gmail.com> References: <1191b555-9440-bb6b-a190-8179c00d3af4@gmail.com> Message-ID: <186194ca-07d8-d77e-48b9-3e1967cd38da@strath.ac.uk> Note that record field names can also overlap if they are applied directly to a record value. The theory behind this is in bidirectional type checking, and how a term having its type checked (rather than inferred) may be ambiguous without the information from the type. The same mechanism allows ? to be reused for dimension abstraction in cubical Agda (because it is a constructor). In short, overloading is fine in the following cases: - Everything being overloaded is a constructor, and there is an obvious type to check the resulting construction against. - Everything being overloaded is a field, and there is an obvious record type that the field is destructing. Outside of these cases, overloading fails. You might notice also that the agda2-infer-type command will usually fail to infer the type of a construction of which the head is an overloaded constructor. This is because Agda really wants to check the construction, rather than inferring a type for it. It just happens that when the constructor is not overloaded, it's easier to make progress, because that gives just enough to check the construction against. Regards, James On 22/12/2019 20:11, Orestis Melkonian wrote: > Constructor names can overlap; the right one will be chosen on usage > depending on the expected type. > Note that other kind of names cannot overlap (e.g. definition names, > etc..). > > Cheers, > --OM > > On 22-12-19 20:05, mechvel at scico.botik.ru wrote: >> People, >> >> how does this occur that Data.List.Relation.Unary.All.Properties >> open-imports >> ???????????? _?_, [] >> >> both from Data.List? and from? Data.List.Relation.Unary.All >> ? >> Are these constructor names so special that they are overloaded? >> >> Regards, >> >> ------ >> Sergei >> >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mechvel at scico.botik.ru Sun Dec 29 12:39:13 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sun, 29 Dec 2019 14:39:13 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: Message-ID: <900db7620429c4e050739265e9b856ba@scico.botik.ru> On 2019-12-22 14:41, Andres Sicard Ramirez wrote: > [..] > The Agda Team is very pleased to announce the first release candidate > of Agda 2.6.1. > [..] > The RC has been tested with GHC 8.8.1, 8.6.5, 8.4.4, 8.2.2 and 8.0.2. > [..] > Standard library > ========== > > For the time being, you can use the *experimental* branch of the > standard library which is compatible with the RC. This branch is > available at > > https://github.com/agda/agda-stdlib/ > [..] I tried it on ghc-8.6.3 under Ubuntu Linux 18.04 on a certain small application List0.agda: > agda $agdaLibOpt List0.agda As I guess, it first starts type-checking the needed part of the "installed" master library of December 29. And it reports Checking List0 (/home/mechvel/inAgda/bfLib/0.3/List0.agda). Checking Data.List.Relation.Unary.All.Properties (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/All/Properties.agda). Checking Data.List.Membership.Propositional.Properties (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Membership/Propositional/Properties.agda). Checking Data.List.Relation.Unary.Any.Properties (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/Any/Properties.agda). /home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/Any/Properties.agda:251,16-27 B.b != q? of type Level when checking that the inferred type of an application Any.map _f_1489 y?ys ? pq? matches the expected type Any.map (? q? ? p , q?) (Any.map (? x? ? P.subst Q x? _1452) y?ys) ? pq? -- SM From matthewdaggitt at gmail.com Sun Dec 29 12:52:41 2019 From: matthewdaggitt at gmail.com (Matthew Daggitt) Date: Sun, 29 Dec 2019 19:52:41 +0800 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: <900db7620429c4e050739265e9b856ba@scico.botik.ru> References: <900db7620429c4e050739265e9b856ba@scico.botik.ru> Message-ID: As Andres said in his email, and as stated in the standard library README you need to use the `development` branch of the library rather the `master` branch with the release candidate. Best, Matthew On Sun, Dec 29, 2019 at 7:39 PM wrote: > On 2019-12-22 14:41, Andres Sicard Ramirez wrote: > > [..] > > The Agda Team is very pleased to announce the first release candidate > > of Agda 2.6.1. > > [..] > > The RC has been tested with GHC 8.8.1, 8.6.5, 8.4.4, 8.2.2 and 8.0.2. > > [..] > > Standard library > > ========== > > > > For the time being, you can use the *experimental* branch of the > > standard library which is compatible with the RC. This branch is > > available at > > > > https://github.com/agda/agda-stdlib/ > > [..] > > > I tried it on ghc-8.6.3 under Ubuntu Linux 18.04 on a certain small > application > List0.agda: > > > agda $agdaLibOpt List0.agda > > As I guess, it first starts type-checking the needed part of the > "installed" > master library of December 29. And it reports > > Checking List0 (/home/mechvel/inAgda/bfLib/0.3/List0.agda). > Checking Data.List.Relation.Unary.All.Properties > > (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/All/Properties.agda). > Checking Data.List.Membership.Propositional.Properties > > (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Membership/Propositional/Properties.agda). > Checking Data.List.Relation.Unary.Any.Properties > > (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/Any/Properties.agda). > > /home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/Any/Properties.agda:251,16-27 > B.b != q? of type Level > when checking that the inferred type of an application > Any.map _f_1489 y?ys ? pq? > matches the expected type > Any.map (? q? ? p , q?) (Any.map (? x? ? P.subst Q x? _1452) y?ys) > ? pq? > > -- > SM > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Sun Dec 29 20:11:26 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Sun, 29 Dec 2019 22:11:26 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: <900db7620429c4e050739265e9b856ba@scico.botik.ru> Message-ID: On 2019-12-29 14:52, Matthew Daggitt wrote: > As Andres said in his email, and as stated in the standard library > README you need to use the `development` branch of the library rather > the `master` branch with the release candidate. Andres writes *experimental*, not `development`. Also he writes A> This branch is available at A> A> https://github.com/agda/agda-stdlib/ But I guess this is the master branch (?). And how to download `experimental' ? -- SM > On Sun, Dec 29, 2019 at 7:39 PM wrote: > >> On 2019-12-22 14:41, Andres Sicard Ramirez wrote: >>> [..] >>> The Agda Team is very pleased to announce the first release >> candidate >>> of Agda 2.6.1. >>> [..] >>> The RC has been tested with GHC 8.8.1, 8.6.5, 8.4.4, 8.2.2 and >> 8.0.2. >>> [..] >>> Standard library >>> ========== >>> >>> For the time being, you can use the *experimental* branch of the >>> standard library which is compatible with the RC. This branch is >>> available at >>> >>> https://github.com/agda/agda-stdlib/ >>> [..] >> >> I tried it on ghc-8.6.3 under Ubuntu Linux 18.04 on a certain small >> >> application >> List0.agda: >> >>> agda $agdaLibOpt List0.agda >> >> As I guess, it first starts type-checking the needed part of the >> "installed" >> master library of December 29. And it reports >> >> Checking List0 (/home/mechvel/inAgda/bfLib/0.3/List0.agda). >> Checking Data.List.Relation.Unary.All.Properties >> > (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/All/Properties.agda). >> Checking Data.List.Membership.Propositional.Properties >> > (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Membership/Propositional/Properties.agda). >> Checking Data.List.Relation.Unary.Any.Properties >> > (/home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/Any/Properties.agda). >> > /home/mechvel/agda/stLib/master-dec29/src/Data/List/Relation/Unary/Any/Properties.agda:251,16-27 >> B.b != q? of type Level >> when checking that the inferred type of an application >> Any.map _f_1489 y?ys ? pq? >> matches the expected type >> Any.map (? q? ? p , q?) (Any.map (? x? ? P.subst Q >> x? _1452) y?ys) >> ? pq? >> >> -- >> SM >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda From sattler.christian at gmail.com Sun Dec 29 20:47:26 2019 From: sattler.christian at gmail.com (Christian Sattler) Date: Sun, 29 Dec 2019 20:47:26 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: <900db7620429c4e050739265e9b856ba@scico.botik.ru> Message-ID: On Sun, 29 Dec 2019 at 20:11, wrote: > A> This branch is available at > A> > A> https://github.com/agda/agda-stdlib/ > > But I guess this is the master branch (?). > And how to download `experimental' ? > git clone https://github.com/agda/agda-stdlib/ target-directory cd target-directory git checkout experimental -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Sun Dec 29 22:54:59 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 30 Dec 2019 00:54:59 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: Message-ID: <93d5088b009cc5614155d10c8d4f8a4e@scico.botik.ru> On 2019-12-22 14:41, Andres Sicard Ramirez wrote: > Dear all, > > The Agda Team is very pleased to announce the first release candidate > of Agda 2.6.1. We plan to release 2.6.1 in three weeks. > [..] Please, see the attached letter. This is a candidate for a bug report. If you do not guess what is the source of the effect, then I could check the difference more precisely. -- SM -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: lett.lagda URL: From Jesper at sikanda.be Mon Dec 30 11:23:07 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Mon, 30 Dec 2019 11:23:07 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: <93d5088b009cc5614155d10c8d4f8a4e@scico.botik.ru> References: <93d5088b009cc5614155d10c8d4f8a4e@scico.botik.ru> Message-ID: I expect the problem is because of the fix of https://github.com/agda/agda/issues/4189. In the Changelog, it says: - > > Record constructors can no longer be qualified by the record module. (See > issue #4189 .) > > record Foo : Set where > constructor foo > > works = foo > fails = Foo.foo > > -- Jesper On Sun, Dec 29, 2019 at 10:55 PM wrote: > On 2019-12-22 14:41, Andres Sicard Ramirez wrote: > > Dear all, > > > > The Agda Team is very pleased to announce the first release candidate > > of Agda 2.6.1. We plan to release 2.6.1 in three weeks. > > [..] > > > Please, see the attached letter. This is a candidate for a bug report. > > If you do not guess what is the source of the effect, then I could check > the > difference more precisely. > > -- > SM > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Mon Dec 30 16:35:23 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 30 Dec 2019 18:35:23 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: <93d5088b009cc5614155d10c8d4f8a4e@scico.botik.ru> Message-ID: <9dfbc57f14932aa33ca93a915d39f2d3@scico.botik.ru> On 2019-12-30 13:23, Jesper Cockx wrote: > I expect the problem is because of the fix of > https://github.com/agda/agda/issues/4189. In the Changelog, it says: > > * > >> Record constructors can no longer be qualified by the record module. >> (See issue #4189 [1].) Yes, it is. Thank you. I continue testing. -- SM > On Sun, Dec 29, 2019 at 10:55 PM wrote: > >> On 2019-12-22 14:41, Andres Sicard Ramirez wrote: >>> Dear all, >>> >>> The Agda Team is very pleased to announce the first release >> candidate >>> of Agda 2.6.1. We plan to release 2.6.1 in three weeks. >>> [..] >> >> Please, see the attached letter. This is a candidate for a bug >> report. >> >> If you do not guess what is the source of the effect, then I could >> check >> the >> difference more precisely. >> >> -- >> SM >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda > > > Links: > ------ > [1] https://github.com/agda/agda/issues/4189 > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From mechvel at scico.botik.ru Mon Dec 30 19:36:42 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Mon, 30 Dec 2019 21:36:42 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: Message-ID: On 2019-12-22 14:41, Andres Sicard Ramirez wrote: > Dear all, > > The Agda Team is very pleased to announce the first release candidate > of Agda 2.6.1. We plan to release 2.6.1 in three weeks. > [..] This Agda-2.6.0.1.20191219 reports "Termination checking failed ..." for -------------------------------- _+ms_ : Op? (List Mon) [] +ms mons' = mons' mons +ms [] = mons ((mon? a e) ? mons) +ms ((mon? b e') ? mons') with comparePP e e' ... | tri> _ _ _ = (mon? a e) ? (mons +ms ((mon? b e') ? mons')) ... | tri< _ _ _ = (mon? b e') ? (((mon? a e) ? mons) +ms mons') ... | tri? _ _ _ = (mon? (a + b) e) ? (mons +ms mons') -------------------------------- while Agda-2.6.0.1 type-checks this. Which one is more correct? Among the arguments for +ms on RHS the first one is smaller by construction than in LHS (for tri>), or the second is smaller by construction than in LHS (for tri<), or each is smaller by construction than in LHS (for tri?). -- SM From herminie.pagel at gmail.com Tue Dec 31 12:00:15 2019 From: herminie.pagel at gmail.com (Herminie Pagel) Date: Tue, 31 Dec 2019 12:00:15 +0100 Subject: [Agda] How to formalize synonym types? Message-ID: Hi, I saw that the boolean datatype is sometimes named `Bool` but also `bool` or `\bB`. For the constructors is the same, sometimes referred to as `true` and `false` or `tt` and `ff`. Also, the naturals receive the name `Nat` and `\nN`, among others. Its constructors are usually named `zero` and `suc`, but they could be called other names also, like `cero` and `sig` or `null` and `nae` or even completely invented names. Intuitively, it seems clear that `Bool` and `\bB` express the same concept by looking at its declarations, as well as with `Nat` and `\nN`, but I do not know how this can be formalized. Can it be done, e.g., by declaring a type, let`s say `Dual` or `Naturals` and then checking that synonymic datatypes belong to them and the new datatype has exactly one element? Bool \bB : Dual Dual ? ? Nat \bN nat : Naturals Naturals ? ? Or maybe with an equivalence relationship, let`s say `?-synonym`? \bB ?-synonym Bool \bN ?-synonym Nat tt ?-synonym True cero ?-synonym zero Is there some definition about synonymity that may be available in the standard library? Thanks and happy new year you all. -------------- next part -------------- An HTML attachment was scrubbed... URL: From mechvel at scico.botik.ru Tue Dec 31 12:31:39 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Tue, 31 Dec 2019 14:31:39 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: Message-ID: <6c6f7b69cc89d190542c37f1f8c296f8@scico.botik.ru> The below function _+ms_ satisfies the following property. For each pattern in the third clause for +ms there exists a nonempty subset js in the argument position set {1, 2} such that (for all i <- js, argument(i) is structurally greater than argument(i)-on-RHS, while the arguments at all other positions do not change syntactically). And by this rule, +ms is terminating. And a generalization of this rule is implemented in Agda. Am I missing something? If it is all right, then Agda-2.6.1 needs to follow Agda-2.6.0.1 at this point. ? -- SM On 2019-12-30 21:36, mechvel at scico.botik.ru wrote: > On 2019-12-22 14:41, Andres Sicard Ramirez wrote: >> Dear all, >> >> The Agda Team is very pleased to announce the first release candidate >> of Agda 2.6.1. We plan to release 2.6.1 in three weeks. >> [..] > > This Agda-2.6.0.1.20191219 reports "Termination checking failed ..." > for > > -------------------------------- > _+ms_ : Op? (List Mon) > [] +ms mons' = mons' > mons +ms [] = mons > ((mon? a e) ? mons) +ms ((mon? b e') ? mons') with comparePP e e' > ... > | tri> _ _ _ = (mon? a e) ? (mons +ms ((mon? b e') ? mons')) > ... | tri< _ _ _ = (mon? b e') ? (((mon? a e) ? mons) +ms mons') > ... | tri? _ _ _ = (mon? (a + b) e) ? (mons +ms mons') > -------------------------------- > > while Agda-2.6.0.1 type-checks this. > Which one is more correct? > > Among the arguments for +ms on RHS the first one is smaller by > construction than in LHS > (for tri>), or the second is smaller by construction than in LHS (for > tri<), > or each is smaller by construction than in LHS (for tri?). > > -- > SM > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda From Jesper at sikanda.be Tue Dec 31 13:23:44 2019 From: Jesper at sikanda.be (Jesper Cockx) Date: Tue, 31 Dec 2019 13:23:44 +0100 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: <6c6f7b69cc89d190542c37f1f8c296f8@scico.botik.ru> References: <6c6f7b69cc89d190542c37f1f8c296f8@scico.botik.ru> Message-ID: >From the changelog: The "with inlining" feature of the termination checker has been removed. As > a consequence, some functions defined using with are no longer accepted as > terminating. See Issue #59 for why this feature was originally introduced > and #3604 for why it had to be removed. > It is likely that your function no longer passes the termination checker because this feature was removed. There were several issues with the implementation of this feature and no-one was willing to maintain it, so unfortunately it had to be removed. -- Jesper On Tue, Dec 31, 2019 at 12:32 PM wrote: > The below function _+ms_ satisfies the following property. > > For each pattern in the third clause for +ms there exists a nonempty > subset js > in the argument position set {1, 2} such that > (for all i <- js, argument(i) is structurally greater than > argument(i)-on-RHS, > while the arguments at all other positions do not change > syntactically). > > And by this rule, +ms is terminating. > And a generalization of this rule is implemented in Agda. > > Am I missing something? > > If it is all right, then Agda-2.6.1 needs to follow Agda-2.6.0.1 at this > point. > > ? > > -- > SM > > > On 2019-12-30 21:36, mechvel at scico.botik.ru wrote: > > On 2019-12-22 14:41, Andres Sicard Ramirez wrote: > >> Dear all, > >> > >> The Agda Team is very pleased to announce the first release candidate > >> of Agda 2.6.1. We plan to release 2.6.1 in three weeks. > >> [..] > > > > This Agda-2.6.0.1.20191219 reports "Termination checking failed ..." > > for > > > > -------------------------------- > > _+ms_ : Op? (List Mon) > > [] +ms mons' = mons' > > mons +ms [] = mons > > ((mon? a e) ? mons) +ms ((mon? b e') ? mons') with comparePP e e' > > ... > > | tri> _ _ _ = (mon? a e) ? (mons +ms ((mon? b e') ? mons')) > > ... | tri< _ _ _ = (mon? b e') ? (((mon? a e) ? mons) +ms mons') > > ... | tri? _ _ _ = (mon? (a + b) e) ? (mons +ms mons') > > -------------------------------- > > > > while Agda-2.6.0.1 type-checks this. > > Which one is more correct? > > > > Among the arguments for +ms on RHS the first one is smaller by > > construction than in LHS > > (for tri>), or the second is smaller by construction than in LHS (for > > tri<), > > or each is smaller by construction than in LHS (for tri?). > > > > -- > > SM > > _______________________________________________ > > Agda mailing list > > Agda at lists.chalmers.se > > https://lists.chalmers.se/mailman/listinfo/agda > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > -------------- next part -------------- An HTML attachment was scrubbed... URL: From gallais at cs.ru.nl Tue Dec 31 16:25:40 2019 From: gallais at cs.ru.nl (Guillaume Allais) Date: Tue, 31 Dec 2019 15:25:40 +0000 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: <6c6f7b69cc89d190542c37f1f8c296f8@scico.botik.ru> Message-ID: <64b56afa-0b32-ba7e-8652-56c213341285@cs.ru.nl> I'll add to that: if you perform all the recursive calls at the same time as `with comparePP e e'` then you should be able to get a terminating version of the function. I am saying "should" because the example is not self-contained and as such it is impossible to test. On 31/12/2019 12:23, Jesper Cockx wrote: > From the changelog: > > The "with inlining" feature of the termination checker has been removed. As >> a consequence, some functions defined using with are no longer accepted as >> terminating. See Issue #59 for why this feature was originally introduced >> and #3604 for why it had to be removed. >> > > It is likely that your function no longer passes the termination checker > because this feature was removed. There were several issues with the > implementation of this feature and no-one was willing to maintain it, so > unfortunately it had to be removed. > > -- Jesper > > On Tue, Dec 31, 2019 at 12:32 PM wrote: > >> The below function _+ms_ satisfies the following property. >> >> For each pattern in the third clause for +ms there exists a nonempty >> subset js >> in the argument position set {1, 2} such that >> (for all i <- js, argument(i) is structurally greater than >> argument(i)-on-RHS, >> while the arguments at all other positions do not change >> syntactically). >> >> And by this rule, +ms is terminating. >> And a generalization of this rule is implemented in Agda. >> >> Am I missing something? >> >> If it is all right, then Agda-2.6.1 needs to follow Agda-2.6.0.1 at this >> point. >> >> ? >> >> -- >> SM >> >> >> On 2019-12-30 21:36, mechvel at scico.botik.ru wrote: >>> On 2019-12-22 14:41, Andres Sicard Ramirez wrote: >>>> Dear all, >>>> >>>> The Agda Team is very pleased to announce the first release candidate >>>> of Agda 2.6.1. We plan to release 2.6.1 in three weeks. >>>> [..] >>> >>> This Agda-2.6.0.1.20191219 reports "Termination checking failed ..." >>> for >>> >>> -------------------------------- >>> _+ms_ : Op? (List Mon) >>> [] +ms mons' = mons' >>> mons +ms [] = mons >>> ((mon? a e) ? mons) +ms ((mon? b e') ? mons') with comparePP e e' >>> ... >>> | tri> _ _ _ = (mon? a e) ? (mons +ms ((mon? b e') ? mons')) >>> ... | tri< _ _ _ = (mon? b e') ? (((mon? a e) ? mons) +ms mons') >>> ... | tri? _ _ _ = (mon? (a + b) e) ? (mons +ms mons') >>> -------------------------------- >>> >>> while Agda-2.6.0.1 type-checks this. >>> Which one is more correct? >>> >>> Among the arguments for +ms on RHS the first one is smaller by >>> construction than in LHS >>> (for tri>), or the second is smaller by construction than in LHS (for >>> tri<), >>> or each is smaller by construction than in LHS (for tri?). >>> >>> -- >>> SM >>> _______________________________________________ >>> Agda mailing list >>> Agda at lists.chalmers.se >>> https://lists.chalmers.se/mailman/listinfo/agda >> >> _______________________________________________ >> Agda mailing list >> Agda at lists.chalmers.se >> https://lists.chalmers.se/mailman/listinfo/agda >> > > > _______________________________________________ > Agda mailing list > Agda at lists.chalmers.se > https://lists.chalmers.se/mailman/listinfo/agda > From mechvel at scico.botik.ru Tue Dec 31 19:14:42 2019 From: mechvel at scico.botik.ru (mechvel at scico.botik.ru) Date: Tue, 31 Dec 2019 21:14:42 +0300 Subject: [Agda] [ANNOUNCE] Agda 2.6.1 release candidate 1 In-Reply-To: References: <6c6f7b69cc89d190542c37f1f8c296f8@scico.botik.ru> Message-ID: On 2019-12-31 15:23, Jesper Cockx wrote: > From the changelog: > >> The "with inlining" feature of the termination checker has been >> removed. As a consequence, some functions defined using with are no >> longer accepted as terminating. See Issue #59 for why this feature >> was originally introduced and #3604 for why it had to be removed. > > It is likely that your function no longer passes the termination > checker because this feature was removed. There were several issues > with the implementation of this feature and no-one was willing to > maintain it, so unfortunately it had to be removed. > Really, is it designed so that to fail to find termination for this: ------------------------------------------------- open import Data.List using (List; []; _?_) open import Data.Nat using (?; _<_) open import Data.Nat.Properties using (_ References: <6c6f7b69cc89d190542c37f1f8c296f8@scico.botik.ru> <64b56afa-0b32-ba7e-8652-56c213341285@cs.ru.nl> Message-ID: On 2019-12-31 18:25, Guillaume Allais wrote: > I'll add to that: if you perform all the recursive calls at the > same time as `with comparePP e e'` then you should be able to get > a terminating version of the function. > > I am saying "should" because the example is not self-contained and > as such it is impossible to test. > A sigh of releaf! The following is recognized as terminating: ------------------------------------------------ open import Data.List using (List; []; _?_) open import Data.Nat using (?; _<_) open import Data.Nat.Properties using (_ On 31/12/2019 12:23, Jesper Cockx wrote: >> From the changelog: >> >> The "with inlining" feature of the termination checker has been >> removed. As >>> a consequence, some functions defined using with are no longer >>> accepted as >>> terminating. See Issue #59 for why this feature was originally >>> introduced >>> and #3604 for why it had to be removed. >>> >> >> It is likely that your function no longer passes the termination >> checker >> because this feature was removed. There were several issues with the >> implementation of this feature and no-one was willing to maintain it, >> so >> unfortunately it had to be removed.