1 (**************************************************************************)
4 (* ||A|| A project by Andrea Asperti *)
6 (* ||I|| Developers: *)
7 (* ||T|| The HELM team. *)
8 (* ||A|| http://helm.cs.unibo.it *)
10 (* \ / This file is distributed under the terms of the *)
11 (* v GNU General Public License Version 2 *)
13 (**************************************************************************)
15 include "basic_2/relocation/ldrop.ma".
17 (* CONTEXT-SENSITIVE UNFOLD FOR TERMS ***************************************)
19 inductive unfold: lenv → relation2 term lenv ≝
20 | unfold_sort: ∀L,k. unfold L (⋆k) L
21 | unfold_lref: ∀I,L1,L2,K1,K2,V,i. ⇩[0, i] L1 ≡ K1. ⓑ{I}V →
22 unfold K1 V K2 → ⇩[|L2|, i] L2 ≡ K2 →
23 unfold L1 (#i) (L1@@L2)
24 | unfold_bind: ∀a,I,L1,L2,V,T.
25 unfold (L1.ⓑ{I}V) T L2 → unfold L1 (ⓑ{a,I}V.T) L2
26 | unfold_flat: ∀I,L1,L2,V,T.
27 unfold L1 T L2 → unfold L1 (ⓕ{I}V.T) L2
30 interpretation "context-sensitive unfold (term)"
31 'Unwind L1 T L2 = (unfold L1 T L2).