From 2ad231054b98f0efd47e295c5425a9b84c74eb20 Mon Sep 17 00:00:00 2001
From: Ralf Jung <jung@mpi-sws.org>
Date: Sun, 1 Feb 2015 13:35:55 +0100
Subject: [PATCH] get rid of the "inner" module, use an opaque WorldProp
 instead

---
 Makefile         |    5 +-
 iris_core.v      |   10 +-
 world_prop.v     |   28 +-
 world_prop_sig.v |   31 -
 wp-type-0.txt    | 5842 ----------------------------------------------
 5 files changed, 32 insertions(+), 5884 deletions(-)
 delete mode 100644 world_prop_sig.v
 delete mode 100644 wp-type-0.txt

diff --git a/Makefile b/Makefile
index 4812b9779..8ce588861 100644
--- a/Makefile
+++ b/Makefile
@@ -14,7 +14,7 @@
 
 #
 # This Makefile was generated by the command line :
-# coq_makefile lib/ModuRes -R lib/ModuRes ModuRes core_lang.v iris.v iris_core.v lang.v masks.v world_prop.v world_prop_sig.v -o Makefile 
+# coq_makefile lib/ModuRes -R lib/ModuRes ModuRes core_lang.v iris.v iris_core.v lang.v masks.v world_prop.v -o Makefile 
 #
 
 .DEFAULT_GOAL := all
@@ -85,8 +85,7 @@ VFILES:=core_lang.v\
   iris_core.v\
   lang.v\
   masks.v\
-  world_prop.v\
-  world_prop_sig.v
+  world_prop.v
 
 -include $(addsuffix .d,$(VFILES))
 .SECONDARY: $(addsuffix .d,$(VFILES))
diff --git a/iris_core.v b/iris_core.v
index e5f68ed62..855d57ce9 100644
--- a/iris_core.v
+++ b/iris_core.v
@@ -1,4 +1,4 @@
-Require Import world_prop_sig core_lang lang masks.
+Require Import world_prop core_lang lang masks.
 Require Import ModuRes.PCM ModuRes.UPred ModuRes.BI ModuRes.PreoMet ModuRes.Finmap.
 
 Module IrisRes (RL : PCM_T) (C : CORE_LANG) <: PCM_T.
@@ -10,10 +10,9 @@ Module IrisRes (RL : PCM_T) (C : CORE_LANG) <: PCM_T.
 End IrisRes.
   
 Module Iris (RL : PCM_T) (C : CORE_LANG).
-Module Import R := IrisRes RL C.
-Module IrisInner (WP : WORLD_PROP R).  
   Module Import L  := Lang C.
-  Import WP.
+  Module Import R  := IrisRes RL C.
+  Module Import WP := WorldProp R.
 
   Delimit Scope iris_scope with iris.
   Local Open Scope iris_scope.
@@ -409,9 +408,6 @@ Module IrisInner (WP : WORLD_PROP R).
 
   End Erasure.
 
-  Check erasure.
-
   Notation " p @ k " := ((p : UPred ()) k tt) (at level 60, no associativity).
 
-End IrisInner.
 End Iris.
diff --git a/world_prop.v b/world_prop.v
index 5f12e852f..72bf7208b 100644
--- a/world_prop.v
+++ b/world_prop.v
@@ -3,8 +3,34 @@
 Require Import ModuRes.PreoMet ModuRes.MetricRec ModuRes.CBUltInst.
 Require Import ModuRes.Finmap ModuRes.Constr.
 Require Import ModuRes.PCM ModuRes.UPred ModuRes.BI.
-Require Import world_prop_sig.
 
+(* This interface keeps some of the details of the solution opaque *)
+Module Type WORLD_PROP (Res : PCM_T).
+  (* PreProp: The solution to the recursive equation. Equipped with a discrete order *)
+  Parameter PreProp    : cmtyp.
+  Instance PProp_preo: preoType PreProp   := disc_preo PreProp.
+  Instance PProp_pcm : pcmType PreProp    := disc_pcm PreProp.
+  Instance PProp_ext : extensible PreProp := disc_ext PreProp.
+
+  (* Defines Worlds, Propositions *)
+  Definition Wld       := nat -f> PreProp.
+  Definition Props     := Wld -m> UPred Res.res.
+  
+  (* Define all the things on Props, so they have names - this shortens the terms later *)
+  Instance Props_ty   : Setoid Props := _.
+  Instance Props_m    : metric Props := _.
+  Instance Props_cm   : cmetric Props := _.
+  Instance Props_preo : preoType Props := _.
+  Instance Props_pcm  : pcmType Props := _.
+
+  (* Establish the recursion isomorphism *)
+  Parameter ı  : PreProp -t> halve (cmfromType Props).
+  Parameter ı' : halve (cmfromType Props) -t> PreProp.
+  Axiom iso : forall P, ı' (ı P) == P.
+  Axiom isoR: forall T, ı (ı' T) == T.
+End WORLD_PROP.
+
+(* Now we come to the actual implementation *)
 Module WorldProp (Res : PCM_T) : WORLD_PROP Res.
 
   (** The construction is parametric in the monoid we choose *)
diff --git a/world_prop_sig.v b/world_prop_sig.v
deleted file mode 100644
index 5399a01ca..000000000
--- a/world_prop_sig.v
+++ /dev/null
@@ -1,31 +0,0 @@
-(* For some reason, the order matters. We cannot import Constr last. *)
-Require Import ModuRes.Finmap ModuRes.Constr ModuRes.MetricRec.
-Require Import ModuRes.PCM ModuRes.UPred ModuRes.BI ModuRes.PreoMet.
-
-
-Module Type WORLD_PROP (Res : PCM_T).
-  Import Res.
-
-  (* PreProp: The solution to the recursive equation. Equipped with a discrete order *)
-  Parameter PreProp    : cmtyp.
-  Instance PProp_preo: preoType PreProp   := disc_preo PreProp.
-  Instance PProp_pcm : pcmType PreProp    := disc_pcm PreProp.
-  Instance PProp_ext : extensible PreProp := disc_ext PreProp.
-
-  (* Defines Worlds, Propositions *)
-  Definition Wld       := nat -f> PreProp.
-  Definition Props     := Wld -m> UPred res.
-
-  (* Establish the recursion isomorphism *)
-  Parameter ı  : PreProp -t> halve (cmfromType Props).
-  Parameter ı' : halve (cmfromType Props) -t> PreProp.
-  Axiom iso : forall P, ı' (ı P) == P.
-  Axiom isoR: forall T, ı (ı' T) == T.
-
-  (* Define all the things on Props, so they have names - this shortens the terms later *)
-  Instance Props_ty   : Setoid Props := _.
-  Instance Props_m    : metric Props := _.
-  Instance Props_cm   : cmetric Props := _.
-  Instance Props_preo : preoType Props := _.
-  Instance Props_pcm  : pcmType Props := _.
-End WORLD_PROP.
diff --git a/wp-type-0.txt b/wp-type-0.txt
deleted file mode 100644
index 1d6591954..000000000
--- a/wp-type-0.txt
+++ /dev/null
@@ -1,5842 +0,0 @@
-@metric_morphism
-  (@metric_morphism expr
-     (@metric_morphism
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     expr_type expr_metr
-     (@nonexp_type
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_metric
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))))
-  (@metric_morphism expr
-     (@metric_morphism
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     expr_type expr_metr
-     (@nonexp_type
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_metric
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))))
-  (@nonexp_type expr expr_type expr_metr
-     (@metric_morphism
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_type
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_metric
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))))
-  (@nonexp_metric expr expr_type expr_metr
-     (@metric_morphism
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_type
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_metric
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))))
-  (@nonexp_type expr expr_type expr_metr
-     (@metric_morphism
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_type
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_metric
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))))
-  (@nonexp_metric expr expr_type expr_metr
-     (@metric_morphism
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_type
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-     (@nonexp_metric
-        (@metric_morphism value Props (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value)
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_type value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        (@nonexp_metric value (@subset_type expr expr_type is_value)
-           (@sub_metric expr expr_type expr_metr is_value) Props
-           (@PMtypeM
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-           (@PMMetric
-              (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-              (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp))))
-              (@metric_findom nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)))
-              (@findom_cmetric nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat)
-                 PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@findom_pcmType nat Comp_nat ord_nat 
-                 (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat
-                 (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-                 (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp))
-                 (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                    (@eqType_proj_type (mtyp (cmm PreProp)))
-                    (@mtyp_proj_metr (cmm PreProp)) 
-                    (@cmtyp_cmetric PreProp)))
-              (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-              (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm))))
-        Props
-        (@PMtypeM
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))
-        (@PMMetric
-           (@FinDom nat (eqtyp (mtyp (cmm PreProp))) Comp_nat ord_nat
-              (@eq_equivalence nat) PreOrd_le PartOrd_nat comp_nat)
-           (@type_findom nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp))))
-           (@metric_findom nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)))
-           (@findom_cmetric nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-           (@extOrd_preo nat Comp_nat ord_nat (@eq_equivalence nat) PreOrd_le
-              PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@findom_pcmType nat Comp_nat ord_nat (@eq_equivalence nat)
-              PreOrd_le PartOrd_nat comp_nat (eqtyp (mtyp (cmm PreProp)))
-              (@eqType_proj_type (mtyp (cmm PreProp)))
-              (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)
-              (@pt_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp))
-              (@pcm_disc (eqtyp (mtyp (cmm PreProp)))
-                 (@eqType_proj_type (mtyp (cmm PreProp)))
-                 (@mtyp_proj_metr (cmm PreProp)) (@cmtyp_cmetric PreProp)))
-           (@UPred res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_type res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_metric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_cmetric res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_preotype res (@PCM_preo res res_unit res_op res_pcm))
-           (@up_pcmetric res (@PCM_preo res res_unit res_op res_pcm)))))
-     : Type
-- 
GitLab