packages feed

MiniAgda-0.2014.1.9: test/succeed/FakeMutual.ma

-- 2010-08-28  fake mutuals, to test positivity checker

-- real mutuals

mutual { 
  data E : Set { e0 : E
               ; eS : O -> E }
  data O : Set { oS : E -> O }
}

mutual {
  data D1 : Set { d1 : D2 -> D1 }   -- D1 /  D2 ++ D3 /
  data D2 : Set { d2 : D3 -> D2 }   -- D1 /  D2 /  D3 ++
  data D3 : Set { d3 : D1 -> D3 }   -- D1 ++ D2 /  D3 /
  {- to see that D1 is spos, we have to traverse the calls through D2 and D3 -}
}

-- fake mutuals

mutual {  

  -- A is spos in its def.
  data A : Set 
  { a1 : A
  ; a2 : A -> A
  }

  -- but not in B
  data B : Set 
  { b1  : B
  ; b2  : (A -> B) -> B
  }
}

mutual {

  -- D is spos in its definition
  data D : Set 
  { c : D
  ; d : D -> D
  }
  -- D is not spos in T
  fun T : Set -> Set
  { T X = D -> X
  }

}