Less restrictive --without-K [Re: [Agda] no longer type checks]
Andrés Sicard-Ramírez
andres.sicard.ramirez at gmail.com
Thu May 30 18:12:14 CEST 2013
On 30 May 2013 09:54, Andreas Abel <andreas.abel at ifi.lmu.de> wrote:
> I implemented the ideas below to make --without-K less restrictive. Maybe
> the pendulum has to swing back after this once more.
>
> 1. Big parameters are now ignored.
>
> Big are those that are in the same universe than the data type or higher.
> Size prevents information to flow from these parameters into the type.
>
> 2. Non-linear parameters are treated just as indices.
>
> This means that Id1 and Id2 are no longer distinguished in the analysis.
>
Before your patch this proof was accepted using the --without-K option:
open import Data.Nat
open import Data.Sum
open import Relation.Binary.PropositionalEquality
foo : ∀ m n → m * n ≡ zero → m ≡ zero ⊎ n ≡ zero
foo zero n h = inj₁ refl
foo (suc m) zero h = inj₂ refl
foo (suc m) (suc n) ()
After your patch the proof is rejected:
The indices
suc (n₁ + m₁ * suc n₁)
0
are not constructors (or literals) applied to variables (note that
parameters count as constructor arguments)
when checking that the clause foo (suc m) (suc n) () has type
(m n : ℕ) → m * n ≡ zero → m ≡ zero ⊎ n ≡ zero
I don't think it is an expected behavior.
--
Andrés
More information about the Agda
mailing list