diff --git a/iris.v b/iris.v
index a433c8d3ca123192c02278958f88f94823fabbb8..ea1e11eb81243a1c8a4c6837b7dbc4a6bd080acd 100644
--- a/iris.v
+++ b/iris.v
@@ -26,6 +26,21 @@ Module Iris (RL : PCM_T) (C : CORE_LANG).
   Instance Props_BI : ComplBI Props | 0 := _.
   Instance Props_Later : Later Props | 0 := _.
 
+  (* Benchmark: How large is thid type? *)
+  Section Benchmark.
+    Local Open Scope mask_scope.
+    Local Open Scope pcm_scope.
+    Local Open Scope bi_scope.
+    Local Open Scope lang_scope.
+
+    Local Instance expr_type : Setoid expr := discreteType.
+    Local Instance expr_metr : metric expr := discreteMetric.
+    Local Instance expr_cmetr : cmetric expr := discreteCMetric.
+
+    Set Printing All.
+    Check ((expr -n> (value -n> Props) -n> Props) -n> expr -n> (value -n> Props) -n> Props).
+  End Benchmark.
+
   (** And now we're ready to build the IRIS-specific connectives! *)
 
   Section Necessitation.
@@ -388,6 +403,7 @@ Module Iris (RL : PCM_T) (C : CORE_LANG).
 
   End Erasure.
 
+
   Notation " p @ k " := ((p : UPred ()) k tt) (at level 60, no associativity).
 
   Section ViewShifts.
diff --git a/wp-type-0.txt b/wp-type-0.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1d659195410448c649eacfd7a2c466e48f39bd2b
--- /dev/null
+++ b/wp-type-0.txt
@@ -0,0 +1,5842 @@
+@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