[Agda] Re: Generic Programming with Indexed Functors
Kenichi Asai
asai at is.ocha.ac.jp
Mon Jan 25 07:10:14 CET 2016
Dear Martin,
It appears you are re-implementing the Indexed Functors using the Agda
standard library. Do you make the code available somewhere?
--
Kenichi Asai
On Wed, Jan 06, 2016 at 08:03:35PM -0800,
Martin Stone Davis wrote:
> {-
> The fixed-point definition in section 2.3 of Generic Programming with Indexed
> Functors no longer type-checks in the latest version of Agda, which complains
> that μ is not strictly positive:
>
> data μ {I O : Set} (F : (I ⊎ O) ▶ O) (r : Indexed I) (o : O) : Set where
> ⟨_⟩ : ⟦ F ⟧ (r ∣ μ F r) o → μ F r o
>
> I haven't had any luck finding a workaround. The code below is ripped from the
> article and reproduces the problem I'm having. Thanks in advance for any help
> solving this.
> -}
>
> module IndexedFunctor where
> open import Function using (_∘_)
> open import Relation.Binary.Core using (_≡_)
>
> open import Data.Empty using (⊥)
> open import Data.Unit using (⊤ ; tt)
>
> open import Data.Product using (_×_ ; ∃)
> open import Data.Sum using (_⊎_ ; inj₁ ; inj₂)
>
> Indexed : Set → Set₁
> Indexed I = I → Set
>
> _▷_ : Set → Set → Set₁
> I ▷ O = Indexed I → Indexed O
>
> record _≃_ (A B : Set) : Set where
> field
> from : A → B
> to : B → A
> iso₁ : ∀ {x} → to (from x) ≡ x
> iso₂ : ∀ {x} → from (to x) ≡ x
>
> _∣_ : ∀ {A B} → Indexed A → Indexed B → Indexed (A ⊎ B)
> _∣_ ia _ (inj₁ x) = ia x
> _∣_ _ ib (inj₂ x) = ib x
>
> mutual
> data _▶_ : Set → Set → Set₁ where
> Z : ∀ {I O} → I ▶ O
> U : ∀ {I O} → I ▶ O
> I : ∀ {I O} → I → I ▶ O
> ! : ∀ {I O} → O → I ▶ O
> _⊕_ : ∀ {I O} → I ▶ O → I ▶ O → I ▶ O
> _⊗_ : ∀ {I O} → I ▶ O → I ▶ O → I ▶ O
> _⊚_ : ∀ {I M O} → M ▶ O → I ▶ M → I ▶ O
> _↗_↘_ : ∀ {I I' O O'} → I' ▶ O' → (I' → I) → (O → O') → I ▶ O
> Fix : ∀ {I O} → (I ⊎ O) ▶ O → I ▶ O
> ∑ : ∀ {I O} → {C : ⊥ ▶ ⊤} → (⟦ C ⟧ (λ _ → ⊤) tt → I ▶ O) → I ▶ O
> Iso : ∀ {I O} → (C : I ▶ O) → (D : I ▷ O) → ((r : Indexed I) → (o : O)
> → D r o ≃ ⟦ C ⟧ r o) → I ▶ O
>
> data μ {I O : Set} (F : (I ⊎ O) ▶ O) (r : Indexed I) (o : O) : Set where
> ⟨_⟩ : ⟦ F ⟧ (r ∣ μ F r) o → μ F r o
>
> ⟦_⟧ : ∀ {I O} → I ▶ O → I ▷ O
> ⟦ Z ⟧ r o = ⊥
> ⟦ U ⟧ r o = ⊤
> ⟦ I i ⟧ r o = r i
> ⟦ F ↗ f ↘ g ⟧ r o = ⟦ F ⟧ (r ∘ f) (g o)
> ⟦ F ⊕ G ⟧ r o = ⟦ F ⟧ r o ⊎ ⟦ G ⟧ r o
> ⟦ F ⊗ G ⟧ r o = ⟦ F ⟧ r o × ⟦ G ⟧ r o
> ⟦ F ⊚ G ⟧ r o = ⟦ F ⟧ (⟦ G ⟧ r) o
> ⟦ Fix F ⟧ r o = μ F r o
> ⟦ ! o' ⟧ r o = o ≡ o'
> ⟦ ∑ f ⟧ r o = ∃ (λ i → ⟦ f i ⟧ r o)
> ⟦ Iso C D e ⟧ r o = D r o
>
> --
> Martin Stone Davis
>
> Postal/Residential:
> 1223 Ferry St
> Apt 5
> Eugene, OR 97401
> Talk / Text / Voicemail: (310) 699-3578
> Electronic Mail: martin.stone.davis at gmail.com
> Website: martinstonedavis.com
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
More information about the Agda
mailing list