]> matita.cs.unibo.it Git - helm.git/blob - helm/coq-contribs/LAMBDA-TYPES/terms_defs.v
some reorganization and some corrections
[helm.git] / helm / coq-contribs / LAMBDA-TYPES / terms_defs.v
1 (*#* #stop file *)
2
3 Require Export Base.
4
5       Inductive Set B := Abbr : B
6                       |  Abst : B
7                       |  Void : B.
8
9       Inductive Set F := Appl : F
10                       |  Cast : F.
11
12       Inductive Set K := Bind : B -> K
13                       |  Flat : F -> K.
14
15       Inductive Set T := TSort : nat -> T
16                       |  TLRef : nat -> T
17                       |  TTail : K -> T -> T -> T.
18
19       Hint f3KTT : ltlc := Resolve (f_equal3 K T T).
20
21       Tactic Definition TGenBase :=
22          Match Context With
23             | [ H: (TTail ? ? ?) = (TTail ? ? ?) |- ? ] -> Inversion H; Clear H
24             | _                                         -> Idtac.
25
26       Definition s: K -> nat -> nat := [k;i] Cases k of
27          | (Bind _) => (S i)
28          | (Flat _) => i
29       end.
30
31    Section s_props. (********************************************************)
32
33       Theorem s_S: (k:?; i:?) (s k (S i)) = (S (s k i)).
34       XElim k; XAuto.
35       Qed.
36
37       Theorem s_plus: (k:?; i,j:?) (s k (plus i j)) = (plus (s k i) j).
38       XElim k; XAuto.
39       Qed.
40
41       Theorem s_plus_sym: (k:?; i,j:?) (s k (plus i j)) = (plus i (s k j)).
42       XElim k; [ Intros; Simpl; Rewrite plus_n_Sm | Idtac ]; XAuto.
43       Qed.
44
45       Theorem s_minus: (k:?; i,j:?) (le j i) ->
46                        (s k (minus i j)) = (minus (s k i) j).
47       XElim k; [ Intros; Unfold s; Cbv Iota | XAuto ].
48       Rewrite minus_Sn_m; XAuto.
49       Qed.
50
51       Theorem minus_s_s: (k:?; i,j:?) (minus (s k i) (s k j)) = (minus i j).
52       XElim k; XAuto.
53       Qed.
54
55       Theorem s_le: (k:?; i,j:?) (le i j) -> (le (s k i) (s k j)).
56       XElim k; Simpl; XAuto.
57       Qed.
58
59       Theorem s_lt: (k:?; i,j:?) (lt i j) -> (lt (s k i) (s k j)).
60       XElim k; Simpl; XAuto.
61       Qed.
62
63       Theorem s_inj: (k:?; i,j:?) (s k i) = (s k j) -> i = j.
64       XElim k; XEAuto.
65       Qed.
66
67    End s_props.
68
69       Hints Resolve s_le s_lt s_inj.
70
71       Tactic Definition SRw :=
72          Repeat (Rewrite s_S Orelse Rewrite s_plus_sym).
73
74       Tactic Definition SRwIn H :=
75          Repeat (Rewrite s_S in H Orelse Rewrite s_plus in H).
76
77       Tactic Definition SRwBack :=
78          Repeat (Rewrite <- s_S Orelse Rewrite <- s_plus Orelse Rewrite <- s_plus_sym).
79
80       Tactic Definition SRwBackIn H :=
81          Repeat (Rewrite <- s_S in H Orelse Rewrite <- s_plus in H Orelse Rewrite <- s_plus_sym in H).
82
83       Hint discr : ltlc := Extern 4 (le ? (plus (s ? ?) ?)) SRwBack.