Git Product home page Git Product logo

hott-agda's Introduction

Github Actions CI HoTT Zulip chat

Homotopy Type Theory is an interpretation of Martin-Löf’s intensional type theory into abstract homotopy theory. Propositional equality is interpreted as homotopy and type isomorphism as homotopy equivalence. Logical constructions in type theory then correspond to homotopy-invariant constructions on spaces, while theorems and even proofs in the logical system inherit a homotopical meaning. As the natural logic of homotopy, type theory is also related to higher category theory as it is used e.g. in the notion of a higher topos.

The HoTT library is a development of homotopy-theoretic ideas in the Coq proof assistant. It draws many ideas from Vladimir Voevodsky's Foundations library (which has since been incorporated into the UniMath library) and also cross-pollinates with the HoTT-Agda library. See also: HoTT in Lean2, Spectral Sequences in Lean2, and Cubical Agda.

More information about this library can be found in:

  • The HoTT Library: A formalization of homotopy type theory in Coq, Andrej Bauer, Jason Gross, Peter LeFanu Lumsdaine, Mike Shulman, Matthieu Sozeau, Bas Spitters, 2016 arXiv CPP17

Other publications related to the library can be found here.

Installation

The HoTT library is part of the Coq Platform and can be installed using the installation instructions there.

More detailed installation instructions are provided in the file INSTALL.md.

Usage

The HoTT library can be used like any other Coq library. If you wish to use the HoTT library in your own project, make sure to put the following arguments in your _CoqProject file:

-arg -noinit
-arg -indices-matter

For more advanced use such as contribution see INSTALL.md.

We recommend the following text editors:

Other methods of developing in coq will work as long as the correct arguments are passed.

Contributing

Contributions to the HoTT library are very welcome! For style guidelines and further information, see the file STYLE.md.

Licensing

The library is released under the permissive BSD 2-clause license, see the file LICENSE.txt for further information. In brief, this means you can do whatever you like with it, as long as you preserve the Copyright messages. And of course, no warranty!

Wiki

More information can be found in the Wiki.

hott-agda's People

Contributors

andrejbauer avatar awodey avatar ecavallo avatar ericfinster avatar favonia avatar guillaumebrunerie avatar imeckler avatar jonaprieto avatar mikeshulman avatar pthariensflame avatar sattlerc avatar spitters avatar stupidpeasant avatar timjb avatar ulrikbuchholtz avatar vikraman avatar wires avatar ystael avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hott-agda's Issues

infix path composition not parsed correctly

I'm seeing some weird behavior with the current HoTT-Agda library in Agda 2.5.1.1: frequently when I want to compose two complicated paths, Agda is unwilling to parse the path-composition operator infix. It says complains something like

Don't know how to parse
(blah1)
∙ (blah2)
Could mean any one of
((blah1)
 ∙)
(blah2)
_∙_
(blah1)
(blah2)
Operators used in the grammar:
  ∙ (infixr operator, level 80) [_∙_ (/home/shulman/hott/agda/core/lib/PathGroupoid.agda:18,3-6)]
(the treatment of operators was changed in Agda 2.5.1, so code that
used to parse may have to be changed)

Here (blah1) and (blah2) are simple function applications, not mixfix operations, and both enclosed in parentheses, so I don't see what the ambiguity could possibly be. I haven't managed to isolate a MWE, but I wonder whether anyone else is seeing this? Is there an easy solution?

Upgrade to Agda 2.3.4

Agda 2.3.4 will introduce changes incompatible with the previous version. I am currently using the developer-version Agda so I put all my recent commits in the branch agda-2.3.4. Any thought?

Update `index.agda`

There are a lot of new files that currently don't get included into index.agda. As a result, the GitHub pages don't display them, and they don't get built when you built index.agda.

This should change, but I don't know which files are safe to include right now. (I'm having some trouble building Agda 2.4.0.1 on my machine, so I can't check for myself.)

Constructors of the same name confuse Agda

I get a lot of confusing yellow highlighting when using HoTT-Agda, which I initially ascribed to inability on my part, but have now reduced to a simple example which has left me just as confused, yet not so assured of my guilt:

https://gist.github.com/aerskine/7962608

When I load this file with Agda 2.3.2.1 the S m == S n term is highlighted yellow, with missing metadata as indicated in the comments.

However, upon commenting out the import statements and replacing with the cut / pasted code from HoTT-Agda the problem vanishes.

Development branch

Let's start a new issue to continue the discussion in Issue #4. Should we rename or merge branches (now)? The issue is that the new development is in the branch 2.0 while the old one is master, which can be confusing, and the porting is not done either.

A frozen artifact

to what I can see, this library seems in a frozen state. however, for education purposes, I think it will be beneficial if there is an artifact, in a form of docker image or even a VM. Thus, people in the future could just run that VM without having to work with a more and more out-of-date Agda configuration.

Archiving this repository

For many years, there have not been any active developments in this repository. All significant contributors to this repository (me included) have moved on to similar-but-different theories (e.g., https://github.com/RedPRL/cooltt and https://github.com/agda/cubical) or even different careers. Even without adding new theorems, updating the current codebase to match the latest development of Agda would still take significant efforts, and more importantly, I do not expect that any new development would be based on this repository.

At this point, it seems I (the only active benevolent dictator) should archive this repository to reflect the reality. I can make some final changes to address a few concerns (e.g., where to find a working Agda 2.5.3), but all other issues will be effectively closed after the archival. I plan to execute the archiving in about one month (around 2021/09/01).

Thanks to all the people who have starred or have even been watching this repository over the years. My Ph.D. thesis was based on this repository and I had a strong emotional attachment. However, actively maintaining this repository is no longer an option for me.

Here are the people whose contributions are above some threshold: @guillaumebrunerie @ecavallo @timjb @ericfinster @jespercockx @sattlerc @ystael @mikeshulman I am tagging them in case I made a misjudgment or abused my ************.

General precedence rule

The upcoming Agda 4.3 no longer has a default fixity/precedence for operators and syntax (which was infix 20 and infix -666, respectively, I believe). In order to make the current code compile we need to put in many fixity/precedence declarations. I would like to take this opportunity to propose the following general rules for precedence:

  1. Separators _$_ and arrows: 0
  2. Layout combinators (equational reasoning): 10-15
  3. Equalities, equivalences: 30
  4. Other relations, operators with line-level separators: 40
  5. Constructors (for example _,_): 60
  6. Binary operators (including type formers like _×_): 80
  7. Prefix operators: 100
  8. Postfix operators: 120

Any suggestions or comments?

Type checking failure in lib/types/Flattening.agda

Hi,

I get the following type error while checking lib/types/Flattening.agda:

HoTT-Agda/lib/types/Flattening.agda:57,21-37
W !=< (a : A) → _P_105 A B f g C D (cc a) of type Set (lmax j i)
when checking that the expression FlattenCurried.f has type
(w : W) → P w → Wt

I am using Agda version 2.4.2.

Compilation warning

Hello!
(disclamer: I'm new to both HoTT and Agda)

I use current (git) version of Agda (Agda version 2.6.0-dc58db0) and HoTT (commit 831dcfc), both pulled 1st July

When I try to compile the library itself it gives warning:

/home/wojciech/Kod/HoTT-Agda/core/lib/Base.agda:70,1-25
Builtin REFL does no longer exist. It is now bound by BUILTIN
EQUALITY
when checking the pragma BUILTIN REFL idp

It's following piece of code:

infix 30 _==_
data _==_ {i} {A : Type i} (a : A) : A → Type i where
  idp : a == a

Path = _==_

{-# BUILTIN EQUALITY _==_ #-}
{-# BUILTIN REFL idp #-}

Simply commenting out the BUILTIN REFL line fixes the problem.

Last changes to these lines are from 2013. Has anyone had similar issue and knows how to fix it?

definition of ↓-='-in/↓-='-out

↓-='-in takes a path (u ∙ ap g p) == (ap f p ∙' v) and turns it into a dependent path u == v [ (λ x → f x == g x) ↓ p ]. Is there a reason why the left side of the first path uses and the right side uses ∙'? The other similar lemmas in lib.types.Paths have ∙' on the left and on the right, which would make more sense to me, since then path induction on p reduces both equalities to u == v for a simpler proof.

(This came up because I want to prove something about a path α : (u ∙ ap g p) == (ap f p ∙' v) and would have a much easier time if I could do induction on α after inducting on p.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.