[Agda] dependent extensionality
James Chapman
james at cs.ioc.ee
Wed Sep 29 14:08:39 CEST 2010
On Wed, Sep 29, 2010 at 6:00 AM, Thorsten Altenkirch <txa at cs.nott.ac.uk> wrote:
>> On Tue, Sep 28, 2010 at 9:52 AM, Thorsten Altenkirch <txa at cs.nott.ac.uk> wrote:
>>> I think dependent extensionality and non-dependent extensionality are equivalent anyway and I don't see how the levels should cause any harm.
> The idea is to define f' g' : A → Σ A B as f' a = a , f a etc and then use ext to prove that f' ≡ g'.
>
> Clearly f = (λ a → proj₂ (f' a)) and similar for g. Now if we can substitute f' for g' we are done.
>
> But can we?
I think so. See below:
{-# OPTIONS --type-in-type #-}
module ext where
data _≡_ {A : Set}(a : A) : {A' : Set} → A' → Set where
refl : a ≡ a
resp : ∀{A}{B : A → Set}(f : ∀ a → B a){a a' : A} → a ≡ a' → f a ≡ f a'
resp f refl = refl
record Σ (A : Set)(B : A -> Set) : Set where
constructor _,_
field fst : A
snd : B fst
open Σ
_* : {A : Set}{B : A → Set}(f : (a : A) → B a) → A → (Σ A λ a → B a)
f * = λ x → x , f x
lem : ∀{A : Set}{B : A → Set}{f g : A → Σ A B} → f ≡ g →
_≡_ {(x : A) → B (fst (f x))} (λ x → snd (f x))
{(x : A) → B (fst (g x))} (λ x → snd (g x))
lem refl = refl
simext : Set
simext = (A B : Set)(f g : A → B) → (∀ x → f x ≡ g x) → f ≡ g
depext : Set
depext = (A : Set)(B : A → Set)(f g : (x : A) → B x) → (∀ x → f x ≡ g x) → f ≡ g
right : depext → simext
right p A B = p A (λ _ → B)
left : simext → depext
left p A B f g q = lem (p A (Σ A λ a → B a) (f *) (g *) (λ x → resp
(_,_ x) (q x)))
Regards,
James
More information about the Agda
mailing list