packages feed

MiniAgda-0.2014.1.9: test/succeed/DotPatternNotLeftToRightBinding.ma

-- 2010-09-22
-- 2012-01-22 parameters gone from constructors

fun A : Set {}
fun B : Set {}
fun f : A -> A {}

data Fix *(a : A) : A -> Set
{ fix : Fix a (f a)
}

-- eta not definable unconditionally (like for Id)
fun eta : (a, b : A) -> Fix a b -> Fix a b
{ eta a .(f a) (fix) = fix
} 

-- variable a used in dot pattern left of its binding
fun bla : (b, a : A) -> Fix a b -> A
{ bla .(f a) a (fix) = a
} 

-- Function inverse

data Inv (g : A -> B) : B -> Set
{ mkInv : (getInv : A) -> Inv g (g getInv)
}
-- MiniAgda does not generate destructor getInv

fun getInv : (g : A -> B) -> (b : B) -> Inv g b -> A
  { getInv g .(g a) (mkInv a) = a 
  }

{- Analysis:

  mkInv : (getInv : A) -> Inv g b  where b = (g getInv)

bind b in destructor type after parameters

  getInv : (g : A -> B) -> (b : B) -> Inv g b -> A

put its value (g a) down as dot-pattern instead of b

  getInv g .(g a) (mkInv .g a) = a

-}

{-
data Id (A : Set)(a : A) : A -> Set
{ refl : Id A a a
}

fun f : (A : Set) -> (c : A -> A) -> (a : A) -> (b : A) -> Id A (c b) b -> A
{ f A c .(c b) b (refl .A .b) = b
}
-}