]> matita.cs.unibo.it Git - helm.git/blob - matita/contribs/LAMBDA-TYPES/Level-1/problems.ma
Foo is the problematic elimination principle.
[helm.git] / matita / contribs / LAMBDA-TYPES / Level-1 / problems.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 (* Problematic objects for disambiguation/typechecking ********************)
16
17 set "baseuri" "cic:/matita/LAMBDA-TYPES/Level-1/problems".
18
19 include "LambdaDelta/theory.ma".
20
21 (* Problem 1: disambiguation errors with these objects *)
22
23 (*  leq_trans (in problems-4)
24  *)
25
26 (* Problem 2: assertion failure raised by type checker on this object *)
27
28 definition foo ≝
29 \lambda g:G.\lambda c:C.\lambda t:T.
30 \lambda P:T\to Prop.
31 \lambda H:\forall t1:T.\forall H:tau0 g c t t1.P t1.
32 \lambda H1:
33  \forall t1:T.\forall H1:tau1 g c t t1.
34   P t1 \to \forall t2:T.\forall H2:tau0 g c t1 t2.P t2.
35  let rec f (t1:T) (H2:tau1 g c t t1) on H2 ≝
36   match H2 return \lambda t2:T.\lambda H3:tau1 g c t t2.P t2 with
37   [ tau1_tau0 => \lambda t2:T.\lambda H3:(tau0 g c t t2).H t2 H3
38   | tau1_sing =>
39      \lambda t2:T.\lambda H3:(tau1 g c t t2).\lambda t3:T.
40       \lambda H4:tau0 g c t2 t3.H1 t2 H3 (f t2 H3) t3 H4
41   ]
42  in f.
43
44
45 inductive tau1 (g:G) (c:C) (t1:T): T \to Prop \def
46 | tau1_tau0: \forall (t2: T).((tau0 g c t1 t2) \to (tau1 g c t1 t2))
47 | tau1_sing: \forall (t: T).((tau1 g c t1 t) \to (\forall (t2: T).((tau0 g c 
48 t t2) \to (tau1 g c t1 t2))))).