[Agda] Abstract existential ?

Andreas Nuyts andreas.nuyts at cs.kuleuven.be
Thu Feb 7 11:28:52 CET 2019


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: <http://lists.chalmers.se/pipermail/agda/attachments/20190207/9bd3e8dc/attachment.html>


More information about the Agda mailing list