{-

 Martin Escardo, 9 May 2016.

 I wanted an inconsistent function

   resize : {i j : Level} → Set i → Set j

 in Agda such that (resize X) is definitionally equal to X,
 as an alternative to --type-in-type.

 Andreas Abel suggested to use Agda's new option --rewriting,
 with the rewrite rule

   resize-id : {i j : Level} {A : Set i} → resize {i} {j} A ↦ A

 Jesper Cockx added a patch to Agda to allow rewrite rules which
 change type, such as the above.

 Thanks to Andreas and Jesper for their instant help!

 I also needed to add the functions resize-in and resize-out below,
 with corresponding rewriting rules.

 This module should not be used other than by specialized modules that
 know what they are doing.

 In this development it is prop.agda only.

 In the current version of Agda, 2.5.2, direct or indirect users of
 this module will need to use the option --rewriting like this:

-}

{-# OPTIONS --rewriting #-}

module resize where

open import Agda.Primitive using (Level ; lzero ; lsuc ; _⊔_) public

postulate
  _↦_ : {i j : Level}{A : Set i}{B : Set j}  A  B  Set (i  j)

{-# BUILTIN REWRITE _↦_ #-}

postulate
  resize        : {i j : Level}  Set i  Set j
  resize-id     : {i j : Level} {X : Set i}  resize {i} {j} X  X
  resize-in     : {i j : Level} {X : Set i}  X  resize {i} {j} X
  resize-in-id  : {i j : Level} {X : Set i} (x : X)  resize-in {i} {j} {X} x  x
  resize-out    : {i j : Level} {X : Set i}  resize {i} {j} X  X
  resize-out-id : {i j : Level} {X : Set i} (r : resize {i} {j} X)  resize-out {i} {j} {X} r  r

{-# REWRITE resize-id #-}
{-# REWRITE resize-in-id #-}
{-# REWRITE resize-out-id #-}