+(**************************************************************************)
+(* ___ *)
+(* ||M|| *)
+(* ||A|| A project by Andrea Asperti *)
+(* ||T|| *)
+(* ||I|| Developers: *)
+(* ||T|| The HELM team. *)
+(* ||A|| http://helm.cs.unibo.it *)
+(* \ / *)
+(* \ / This file is distributed under the terms of the *)
+(* v GNU General Public License Version 2 *)
+(* *)
+(**************************************************************************)
+
+include "Basic_2/functional/rtm.ma".
+
+(* REDUCTION AND TYPE MACHINE ***********************************************)
+
+(* transitions *)
+inductive rtm_step: relation rtm โ
+| rtm_ldrop : โG,u,E,I,t,F,V,S,i.
+ rtm_step (mk_rtm G u (E. โฃ{I} {t, F, V}) S (#(i + 1)))
+ (mk_rtm G u E S (#i))
+| rtm_ldelta: โG,u,E,t,F,V,S.
+ rtm_step (mk_rtm G u (E. โฃ{Abbr} {t, F, V}) S (#0))
+ (mk_rtm G u F S V)
+| rtm_ltype : โG,u,E,t,F,V,S.
+ rtm_step (mk_rtm G u (E. โฃ{Abst} {t, F, V}) S (#0))
+ (mk_rtm G u F S V)
+| rtm_gdrop : โG,I,V,u,E,S,p. p < |G| โ
+ rtm_step (mk_rtm (G. ๐{I} V) u E S (ยงp))
+ (mk_rtm G u E S (ยงp))
+| rtm_gdelta: โG,V,u,E,S,p. p = |G| โ
+ rtm_step (mk_rtm (G. ๐{Abbr} V) u E S (ยงp))
+ (mk_rtm G u E S V)
+| rtm_gtype : โG,V,u,E,S,p. p = |G| โ
+ rtm_step (mk_rtm (G. ๐{Abst} V) u E S (ยงp))
+ (mk_rtm G u E S V)
+| rtm_tau : โG,u,E,S,W,T.
+ rtm_step (mk_rtm G u E S (๐{Cast} W. T))
+ (mk_rtm G u E S T)
+| rtm_appl : โG,u,E,S,V,T.
+ rtm_step (mk_rtm G u E S (๐{Appl} V. T))
+ (mk_rtm G u E ({E, V} :: S) T)
+| rtm_beta : โG,u,E,F,V,S,W,T.
+ rtm_step (mk_rtm G u E ({F, V} :: S) (๐{Abst} W. T))
+ (mk_rtm G u (E. โฃ{Abbr} {u, F, V}) S T)
+| rtm_push : โG,u,E,W,T.
+ rtm_step (mk_rtm G u E โ (๐{Abst} W. T))
+ (mk_rtm G (u + 1) (E. โฃ{Abst} {u, E, W}) โ T)
+| rtm_theta : โG,u,E,S,V,T.
+ rtm_step (mk_rtm G u E S (๐{Abbr} V. T))
+ (mk_rtm G u (E. โฃ{Abbr} {u, E, V}) S T)
+.