]> matita.cs.unibo.it Git - helm.git/blob - helm/software/matita/contribs/LAMBDA-TYPES/Unified-Sub/Lift/defs.ma
eac00ae357c40fcba2723dd85f1b7e3067c7c325
[helm.git] / helm / software / matita / contribs / LAMBDA-TYPES / Unified-Sub / Lift / defs.ma
1 (**************************************************************************)
2 (*       ___                                                              *)
3 (*      ||M||                                                             *)
4 (*      ||A||       A project by Andrea Asperti                           *)
5 (*      ||T||                                                             *)
6 (*      ||I||       Developers:                                           *)
7 (*      ||T||         The HELM team.                                      *)
8 (*      ||A||         http://helm.cs.unibo.it                             *)
9 (*      \   /                                                             *)
10 (*       \ /        This file is distributed under the terms of the       *)
11 (*        v         GNU General Public License Version 2                  *)
12 (*                                                                        *)
13 (**************************************************************************)
14
15 set "baseuri" "cic:/matita/LAMBDA-TYPES/Unified-Sub/Lift/defs".
16
17 (* LIFT RELATION
18    - Usage: invoke with positive polarity
19 *)
20
21 include "Term/defs.ma".
22
23 inductive Lift: Bool \to Nat \to Nat \to Term \to Term \to Prop \def
24    | lift_sort   : \forall l,q,i,h. 
25                    Lift q l i (leaf (sort h)) (leaf (sort h))
26    | lift_lref   : \forall l,i,j. 
27                    Lift false l i (leaf (lref j)) (leaf (lref j))
28    | lift_lref_lt: \forall l,i,j. j < i \to 
29                    Lift true l i (leaf (lref j)) (leaf (lref j))
30    | lift_lref_ge: \forall l,i,j1. i <= j1 \to
31                    \forall j2. (j1 + l == j2) \to
32                    Lift true l i (leaf (lref j1)) (leaf (lref j2))
33    | lift_bind   : \forall l,i,u1,u2. Lift true l i u1 u2 \to
34                    \forall q,t1,t2. Lift q l (succ i) t1 t2 \to 
35                    \forall r.
36                    Lift q l i (head q (bind r) u1 t1) (head q (bind r) u2 t2)
37    | lift_flat   : \forall l,i,u1,u2. Lift true l i u1 u2 \to
38                    \forall q,t1,t2. Lift q l i t1 t2 \to 
39                    \forall r.
40                    Lift q l i (head q (flat r) u1 t1) (head q (flat r) u2 t2)
41    | lift_head   : \forall l,q,p. (p = q \to False) \to
42                    \forall i,u1,u2. Lift false l i u1 u2 \to
43                    \forall t1,t2. Lift q l i t1 t2 \to 
44                    \forall z.
45                    Lift q l i (head p z u1 t1) (head p z u2 t2)
46 .