(* *)
(**************************************************************************)
-include "delayed_updating/syntax/path.ma".
-include "delayed_updating/notation/relations/up_down_arrow_epsilon_2.ma".
-include "delayed_updating/notation/relations/up_arrow_epsilon_2.ma".
+include "delayed_updating/syntax/prototerm.ma".
+include "delayed_updating/syntax/path_structure.ma".
+include "delayed_updating/notation/functions/class_t_0.ma".
(* PRETERM ******************************************************************)
-definition preterm: Type[0] ≝ predicate path.
-
-definition preterm_in_comp: relation2 path preterm ≝
- λp,t. t p.
-
-interpretation
- "belongs to complete (preterm)"
- 'UpDownArrowEpsilon p t = (preterm_in_comp p t).
-
-definition preterm_in_root: relation2 path preterm ≝
- λp,t. ∃q. p;;q ϵ⬦ t.
+(* Note: a preterm is a prototerm satislying the condition below *)
+(* Note: different root paths have different structure *)
+definition structure_injective: predicate prototerm ≝
+ λt. ∀p1,p2. p1 ϵ ▵t → p2 ϵ ▵t → ⊗p1 = ⊗p2 → p1 = p2
+.
interpretation
- "belongs to root (preterm)"
- 'UpArrowEpsilon p t = (preterm_in_root p t).
-
-(* Basic constructions ******************************************************)
-
-lemma preterm_in_comp_root (p) (t):
- p ϵ⬦ t → p ϵ▵ t.
-/2 width=2 by ex_intro/
-qed.
+ "preterm (prototerm)"
+ 'ClassT = (structure_injective).