A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/agda/agda/issues/7236 below:

Expected a hidden argument, but found a visible argument in with-abstraction when using REWRITE · Issue #7236 · agda/agda · GitHub

Using Agda v2.6.4.3 and agda-stdlib v2.0, I'm encountering the following error

Expected a hidden argument, but found a visible argument
when checking that the type
{Γ Γ' Γ'' : Ctx} (ρ : Rename Γ' Γ'') (σ : Subst Γ Γ') {τ₁ τ₂ : Ty}
(e : Expr (τ₁ ∷ Γ) τ₂) →
subst (λ x → var (Rename.cons zero (λ x₁ → suc (ρ x₁)) x))
(subst (var zero • (λ idx → Rename.rename suc (σ idx))) e)
≡
subst
(var zero • (λ idx → Rename.rename suc (σ idx)) ;
 (λ x → var (Rename.cons zero (λ x₁ → suc (ρ x₁)) x)))
e →
abstraction
(subst (var zero • (λ idx → var (suc (ρ idx))))
 (subst (var zero • (λ idx → Rename.rename suc (σ idx))) e))
≡
abstraction
(subst
 (var zero •
  (λ idx → Rename.rename suc (subst (λ z {τ} → var (ρ τ)) (σ idx))))
 e)
of the generated with function is well-formed
(https://agda.readthedocs.io/en/v2.6.4/language/with-abstraction.html#ill-typed-with-abstractions)

when trying to typecheck the following:

{-# OPTIONS --rewriting #-}

module MWE where

open import Data.Fin using (Fin)
open import Data.List using (List; _∷_)
open import Data.Nat using (ℕ)
open import Function using (_∘_)
open import Relation.Binary.PropositionalEquality using (refl; _≡_)

data Ty : Set where
    arr : Ty  Ty  Ty

Ctx : Set
Ctx = List Ty

data Idx : Ctx  Ty  Set where
    zero :: Ctx} {τ : Ty}  Idx (τ ∷ Γ) τ
    suc :: Ctx} {τ₁ τ₂ : Ty}  Idx Γ τ₂  Idx (τ₁ ∷ Γ) τ₂

data Expr: Ctx) : Ty  Set where
    var :: Ty}  Idx Γ τ  Expr Γ τ
    abstraction : {τ₁ τ₂ : Ty}  Expr (τ₁ ∷ Γ) τ₂  Expr Γ (Ty.arr τ₁ τ₂)

module Rename where
    Rename : Ctx  Ctx  Set
    Rename Γ Γ' =: Ty}  Idx Γ τ  Idx Γ' τ

    cons : {Γ Γ' : Ctx} {τ : Ty}  Idx Γ' τ  Rename Γ Γ'  Rename (τ ∷ Γ) Γ'
    cons idx ρ Idx.zero = idx
    cons idx ρ (Idx.suc idx') = ρ idx'

    ext : {Γ Γ' : Ctx} {τ : Ty}  Rename Γ Γ'  Rename (τ ∷ Γ) (τ ∷ Γ')
    ext ρ = cons Idx.zero (Idx.suc ∘ ρ)

    rename : {Γ Γ' : Ctx} {τ : Ty}  Rename Γ Γ'  Expr Γ τ  Expr Γ' τ
    rename ρ (Expr.var idx) = Expr.var (ρ idx)
    rename ρ (Expr.abstraction e) = Expr.abstraction (rename (ext ρ) e)

open Rename using (Rename)

Subst : Ctx  Ctx  Set
Subst Γ Γ' =: Ty}  Idx Γ τ  Expr Γ' τ

infixr 6 _•_
_•_ : {Γ Γ' : Ctx} {τ : Ty}  Expr Γ' τ  Subst Γ Γ'  Subst (τ ∷ Γ) Γ'
_•_ e σ Idx.zero = e
_•_ e σ (Idx.suc idx) = σ idx

: {Γ Γ' : Ctx} {τ : Ty}  Subst Γ Γ'  Subst Γ (τ ∷ Γ')
⟰ σ idx = Rename.rename Idx.suc (σ idx)

ext : {Γ Γ' : Ctx} {τ : Ty}  Subst Γ Γ'  Subst (τ ∷ Γ) (τ ∷ Γ')
ext σ = Expr.var Idx.zero • ⟰ σ

subst : {Γ Γ' : Ctx} {τ : Ty} (σ : Subst Γ Γ')  Expr Γ τ  Expr Γ' τ
subst σ (Expr.var idx) = σ idx
subst σ (Expr.abstraction e) = Expr.abstraction (subst (ext σ) e)

ren : {Γ Γ' : Ctx}  Rename Γ Γ'  Subst Γ Γ'
ren ρ = Expr.var ∘ ρ

abstract 
    infixr 5 _;_
    _;_ : {Γ Γ' Γ'' : Ctx}  Subst Γ Γ'  Subst Γ' Γ''  Subst Γ Γ''
    (σ ; σ') x = subst σ' (σ x)

abstract
    seq-def : {Γ Γ' Γ'' : Ctx} {τ : Ty} (σ : Subst Γ Γ') (σ' : Subst Γ' Γ'') (idx : Idx Γ τ)  (σ ; σ') idx ≡ subst σ' (σ idx)
    seq-def σ σ' idx = refl

{-# BUILTIN REWRITE _≡_ #-}
{-# REWRITE seq-def #-}

subst-ren : {Γ Γ' Γ'' : Ctx} {τ : Ty} (ρ : Rename Γ' Γ'') (σ : Subst Γ Γ') (e : Expr Γ τ)  subst (ren ρ) (subst σ e) ≡ subst (σ ; (ren ρ)) e
subst-ren ρ σ (Expr.var idx) = refl
subst-ren ρ σ (Expr.abstraction e) with subst-ren (Rename.ext ρ) (ext σ) e
... | x = ? 

The problem goes away if I don't use REWRITE.

(Was recommended to file bug report from chat)


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4