[Agda] question on irrelevant argument
Sergei Meshveliani
mechvel at botik.ru
Sun Jan 19 20:45:55 CET 2014
On Sun, 2014-01-19 at 15:26 +0100, Ulf Norell wrote:
> You can define an irrelevant version of ⊥-elim which you can use in
> foo2 and foo3:
>
>
> ⊥-elim-irr : .(x : ⊥) → ∀ {a}{A : Set a} → A
> ⊥-elim-irr ()
>
Thank you.
I tried several attempts with this. Finally I discover that this one is
type-checked:
foo2 : (m n : ℕ) → .(nz : n ≢ zero) → ℕ
foo2 _ (suc n) _ = n
foo2 _ zero nz = ⊥-elim-irr (nz PE.refl)
Generally, there are many situations in which I can write a type-checked
Agda program only by a lucky occasion.
Thus, I tried in this example
foo2 _ zero _ = ⊥-elim-irr ({!!} PE.refl)
under emacs, and C-c C-a. This does not help!
I tried
foo2 _ zero _ = ⊥-elim-irr {!!}
This occurs lucky. Here C-c C-a shows "(.nz PE.refl)" -- some hint.
It is not still type checked! Then I change here ".nz" to "nz" :
"Not in scope: nz".
Then I replace there "_ =" with "nz _ =".
I expected that it will report that nz declared as irrelevant and
cannot be used this way.
But it is type-checked!
-- unlike with ⊥-elim.
Regards,
--------
Sergei
>
>
> On Sun, Jan 19, 2014 at 2:50 PM, Sergei Meshveliani <mechvel at botik.ru>
> wrote:
> Please,
> how to fix foo2, foo3 shown below?
>
> ----------------------------------------------------------------
> open import Relation.Binary.PropositionalEquality as PE using
> (_≡_; _≢_)
> open import Data.Empty using (⊥-elim)
> open import Data.Nat using (ℕ; module ℕ)
>
> open ℕ
>
> foo : (m n : ℕ) → n ≢ zero → ℕ -- this works
> foo _ (suc n) _ = n
> foo _ zero nz = ⊥-elim (nz PE.refl)
>
>
> foo2 : (m n : ℕ) → .(n ≢ zero) → ℕ
> foo2 _ (suc n) _ = n
> foo2 _ zero _ = ⊥-elim (u PE.refl) -- is not
> type-checked
> where
> u : zero ≢ zero
> u = _
> {-
> foo3 : (m n : ℕ) → .{nz : n ≢ zero} → ℕ
> foo3 _ (suc n) {_} = n
> foo3 _ zero {_} = ⊥-elim (u PE.refl) -- is not
> type-checked
> where
> u : zero ≢ zero
> u = {!!}
> -}
> ---------------------------------------------------------------------
>
> The checker (of development Agda of January 8, 2014)
>
> does not allow to skip the `zero' branch, nor to set () there,
> nor to apply ⊥-elim
> (nz is rejected for u, as well as '_').
>
> Thanks,
>
> ------
> Sergei
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>
>
More information about the Agda
mailing list