[Agda] Sized types problem

Andrea Vezzosi sanzhiyan at gmail.com
Mon Aug 18 11:36:58 CEST 2014


Hi Roly,

If you give the size argument explicitly it goes through:

  ⊖ (ν• (νᶜ_ {ι} E)) (νν-swap P) with swap ᵀ* E
   ... | swap*E rewrite swap-involutive P | swap∘push
     = _ , νᵇ (ν•_ {ι = ι} swap*E)


Cheers,
Andrea

On Mon, Aug 18, 2014 at 9:39 AM, Roly Perera
<roly.perera at dynamicaspects.org> wrote:
> Hi,
>
> I'm modelling pi calculus in Agda and having difficulty using sized types in
> order to have the function ⊖ below pass the termination-checker. I'm also
> getting an error message which looks a bit odd, so perhaps there's a clue to
> what I'm doing wrong in there.
>
> {-# OPTIONS --sized-types #-}
>
> module Temp where
>
>    open import Data.Product public hiding (swap)
>    open import Relation.Binary.PropositionalEquality
>    open import Size
>
>    -- Processes.
>    data Proc : Set where
>       ν_ : Proc → Proc
>
>    -- Actions.
>    data ⟿ᵇ : Set where
>       input : ⟿ᵇ
>       boundOut : ⟿ᵇ
>
>    data ⟿ᶜ : Set where
>       out : ⟿ᶜ
>
>    data ⟿ : Set where
>       _ᵇ : ⟿ᵇ → ⟿
>       _ᶜ : ⟿ᶜ → ⟿
>
>    -- Renamings. Leave undefined for now.
>    data Ren : Set where
>
>    postulate
>       push : Ren
>       swap : Ren
>       _ᴬ*_ : Ren → ⟿ᶜ →  ⟿ᶜ
>
>    -- Transitions.
>    data _—[_]→_ : {ι : Size} → Proc → (a : ⟿) → Proc → Set where
>       ν•_ : ∀ {ι P R} → _—[_]→_ {ι = ι} P (out ᶜ) R →
>             _—[_]→_ {ι = ↑ ι} (ν P) (boundOut ᵇ) R
>       νᵇ_ : ∀ {ι P R} {a : ⟿ᵇ} → _—[_]→_ {ι = ι} P (boundOut ᵇ) R →
>             _—[_]→_ {ι = ↑ ι} (ν P) (a ᵇ) (ν R)
>       νᶜ_ : ∀ {ι P R} → _—[_]→_ {ι = ι} P ((push ᴬ* out) ᶜ) R →
>             _—[_]→_ {ι = ↑ ι} (ν P) (out ᶜ) (ν R)
>
>    infixl 0 _—[_]→_
>
>    postulate
>       _ᴾ*_ : Ren → Proc → Proc
>       _ᵀ*_ : ∀ {ι} (ρ : Ren) {P R} {a : ⟿ᶜ} → _—[_]→_ {ι = ι} P (a ᶜ) R →
>              _—[_]→_ {ι = ι} (ρ ᴾ* P) ((ρ ᴬ* a) ᶜ) (ρ ᴾ* R)
>       swap-involutive : ∀ (P : Proc) → swap ᴾ* swap ᴾ* P ≡ P
>       swap∘push : swap ᴬ* push ᴬ* out ≡ out
>
>    infixr 8 _ᵀ*_ _ᴾ*_ _ᴬ*_
>
>    -- Structural congruence.
>    infix 4 _≅_
>    data _≅_ : Proc → Proc → Set where
>       νν-swap : ∀ P → ν (ν (swap ᴾ* P)) ≅ ν (ν P)
>
>    -- "Residual" of a transition E after a structural congruence φ.
>    ⊖ : ∀ {ι P P′} {a : ⟿} {R} (E : _—[_]→_ {ι = ι} P a R) (φ : P ≅ P′) →
>        Σ[ R ∈ Proc ] _—[_]→_ {ι = ι} P′ a R
>    ⊖ (ν•_ (νᶜ E)) (νν-swap P) with swap ᵀ* E
>    ... | swap*E rewrite swap-involutive P | swap∘push =
>       _ , {!!} -- νᵇ (ν• swap*E)
>    ⊖ E φ = {!!}
>
> (I can try to boil the code down further if that would help, but I wanted to
> maintain some of the structure of my setting.)
>
> In the first goal above, I'm matching on the situation where there are
> adjacent ν binders, and showing that if I transpose the binders (by applying
> the 'swap' renaming under the binders) then the associated steps in the
> derivation also tranpose. Intuitively this preserves the size of the
> transition derivation. And indeed, toggling hidden arguments reveals that
> the goal has type _—[_]→_ {↑ (↑ .ι)}, so I expect to be able to apply two
> constructors (νᵇ and ν• in this case) in return for two I eliminated (ν• and
> νᶜ).
>
> I can also see that E has type _—[_]→_ {.ι}. Since I've postulated that ᵀ*
> is size-preserving, the variable swap*E also has this type. Naively, I
> expect νᵇ (ν• swap*E) to therefore be size-consistent with the goal. However
> Agda complains that the constraints are inconsistent.
>
> Weirdly, if I use a "with" clause to introduce ν• swap*E into the context, I
> get the following error:
>
> .ι !=< P of type Size
> when checking that the expression E has type
> swap ᴾ* P —[ (push ᴬ* out) ᶜ ]→ .R
>
> This is baffling because the appearance of meta-variable P in the error
> message suggests that Agda is trying to match a size index against a
> variable of type Proc, does it not?
>
> Can anyone shed any light on what's going on here?
>
> many thanks,
> Roly
>
>
> Roly Perera
> LFCS, School of Informatics
> University of Edinburgh
>
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>


More information about the Agda mailing list