[Agda] trustMe and make my coercion go

Benja Fallenstein benja.fallenstein at gmail.com
Wed Sep 15 23:56:25 CEST 2010


Hi Andreas,

On Wed, Sep 15, 2010 at 11:00 PM, Andreas Abel <andreas.abel at ifi.lmu.de> wrote:
> I have looked a bit at the theory of primTrustMe.  Actually it is a special
> case of eta-expansion for Leibniz-Equality.

Right, because the type checker checks the definitional equality
before reducing primTrustMe to refl, so you can't put refl into types
that don't contain it already -- e.g., in (\(q : Top == Bottom) ->
coerce (compute-dammit! q) unit), the coercion would not go, because
the primTrustMe would not reduce to refl. I guess that makes the
effect on the metatheory much less drastic...

> I have a (fairly theoretical) paper on this on my homepage, it was presented
> at the NBE'09 workshop.

Thanks, I'll have to try whether I can follow it :-)

> On Sep 15, 2010, at 9:56 PM, Benja Fallenstein wrote:
>> Now I'm wondering what effect introducing compute-dammit!
>
> Maybe you mean primTrustMe?  compute-dammit! is just a definition so it does
> not change the metatheory.
>
>> would have
>> on the metatheory

No, I mean what the effect would be of introducing a constant with the
behavior of compute-dammit!, which could be implemented in Agda by the
definition I gave (i.e., through a module that exposes
compute-dammit!, but not primTrustMe).

Actually, with this context I'm not really sure what you mean by,

> Consistency holds rather directly, since each closed term of type a == a is refl anyway.

After all, if you introduce primTrustMe itself, true == false is inhabited, so:

resp : {X : Set} → (F : X → Set)
     → {x y : X} → x == y → F x ==₁ F y
resp f refl = refl₁

bad : ⊥
bad = coerce (resp (\b → if b then ⊤ else ⊥) (primTrustMe {Bool}
{true} {false})) unit

Could you elaborate a little there? :-)

Thanks again,
- Benja


More information about the Agda mailing list