packages feed

MiniAgda-0.2014.1.9: test/fail/FunctionExtensionality.ma

-- 2012-03-07 chat with Nicolai Kraus

data Id (A : Set) (a : A) : A -> Set
{ refl : Id A a a
}
check
fun subst : [A : Set] [a, b : A] [q : Id A a b]
            [P : A -> Set] -> P a -> P b
{ subst A a .a refl P h = h
}

fun J : [A : Set] [P : (a,b : A) -> Id A a b -> Set]
  (h : (a : A) -> P a a refl) (a,b : A) [q : Id A a b] -> P a b q
{ J A P h a .a refl = h a
}

-- defining subst from J
let subst [A : Set] (a, b : A) (q : Id A a b)
          [P : A -> Set] : P a -> P b
  = J A (\ x y p -> P x -> P y) (\ y p -> p) a b q

-- extensionality axiom
fun ext : [A : Set] [B : A -> Set] [f, g : (x : A) -> B x]
  (h : [x : A] -> Id (B x) (f x) (g x)) ->
  Id ((x : A) -> B x) f g {}

let extReducesNot [A : Set] [a : A] [f : A -> A] [p : [x : A] -> Id A x (f x)] :
  Id A a (subst (A -> A) (\ x -> x) f
           (ext A (\ x -> A) (\ x -> x) f p)
           (\ x -> A)
           a)
  = refl