# HG changeset patch # User Cezary Kaliszyk # Date 1269944360 -7200 # Node ID ccd2ab0cebf355d68b987fe66a6b8cc5cea10825 # Parent 62b87efcef29ccfc8190d684f52cd674a7c5f811 clean fv_bn diff -r 62b87efcef29 -r ccd2ab0cebf3 Paper/Paper.thy --- a/Paper/Paper.thy Tue Mar 30 11:45:41 2010 +0200 +++ b/Paper/Paper.thy Tue Mar 30 12:19:20 2010 +0200 @@ -1122,26 +1122,27 @@ \noindent In case the argument @{text "x\<^isub>i"} is not a binder, it might be a body of one or more abstractions. Let @{text "bnds"} be the bound atoms computed - as follows: If @{text "x\<^isub>i"} is not a body of an abstraction @{text "{}"}. + as follows: If @{text "x\<^isub>i"} is not a body of an abstraction @{term "{}"}. Otherwise there are two cases: either the corresponding binders are all shallow or there is a single deep binder. In the former case we build the union of all shallow binders; in the later case we just take set or list of atoms the specified binding function returns. With @{text "bnds"} computed as above the value of - for @{text "x\<^isub>i"} is given by: - + for @{text "x\<^isub>i"} is given by: + \begin{center} \begin{tabular}{cp{7cm}} $\bullet$ & @{text "{atom x\<^isub>i} - bnds"} provided @{term "x\<^isub>i"} is an atom\\ $\bullet$ & @{text "(atoms x\<^isub>i) - bnds"} provided @{term "x\<^isub>i"} is a set of atoms\\ $\bullet$ & @{text "(atoms (set x\<^isub>i)) - bnds"} provided @{term "x\<^isub>i"} is a list of atoms\\ - $\bullet$ & @{text "(fv_ty\<^isub>i x\<^isub>i) - bnds"} provided @{term "ty\<^isub>i"} is a nominal datatype\\ - $\bullet$ & @{term "{}"} otherwise + $\bullet$ & @{text "(fv_ty\<^isub>m x\<^isub>i) - bnds"} provided @{term "x\<^isub>i"} is one of the datatypes + we are defining, with the free variable function @{text "fv_ty\<^isub>m"}\\ + $\bullet$ & @{text "(fv\<^isup>\ x\<^isub>i) - bnds"} provided @{term "x\<^isub>i"} is a defined nominal datatype + with a free variable function @{text "fv\<^isup>\"}\\\\ + $\bullet$ & @{term "{}"} otherwise \end{tabular} \end{center} -\marginpar{\small We really have @{text "bn_raw"}, @{text "fv_bn_raw"}. Should we mention this?} - \noindent Next, for each binding function @{text "bn"} we define a free variable function @{text "fv_bn"}. The basic idea behind this function is to compute all the free atoms under this binding @@ -1153,18 +1154,19 @@ we define @{text "fv_bn"} to be the union of the values calculated for @{text "x\<^isub>j"} as follows: - \marginpar{raw for being defined} - \begin{center} \begin{tabular}{cp{7cm}} - $\bullet$ & @{term "{}"} provided @{term "x\<^isub>j"} occurs in @{text "rhs"} and is an atom\\ + $\bullet$ & @{term "{}"} provided @{term "x\<^isub>j"} occurs in @{text "rhs"} and is an atom, + atom list or atom set\\ $\bullet$ & @{text "fv_bn\<^isub>m x\<^isub>j"} provided @{term "x\<^isub>j"} occurs in @{text "rhs"} with the recursive call @{text "bn\<^isub>m x\<^isub>j"}\\ - $\bullet$ & @{text "(atoms x\<^isub>j) - bnds"} provided @{term "x\<^isub>j"} is a set of atoms\\ - $\bullet$ & @{text "(atoml x\<^isub>j) - bnds"} provided @{term "x\<^isub>j"} is a list of atoms\\ - $\bullet$ & @{text "(fv_ty x\<^isub>j) - bnds"} provided @{term "x\<^isub>j"} is a nominal datatype - with a free variable function @{text "fv_ty"}. This includes the types being - defined, where we use an appropriate @{term "fv_ty\<^isub>i"} function.\\ + $\bullet$ & @{text "atoms x\<^isub>j"} provided @{term "x\<^isub>j"} is a set of atoms not in @{text "rhs"}\\ + $\bullet$ & @{term "atoml x\<^isub>j"} provided @{term "x\<^isub>j"} is a list of atoms not in @{text "rhs"}\\ + $\bullet$ & @{text "fv_ty\<^isub>i x\<^isub>j"} provided @{term "x\<^isub>j"} is not in @{text "rhs"} and is + one of the datatypes + we are defining, with the free variable function @{text "fv_ty\<^isub>m"}\\ + $\bullet$ & @{text "fv_ty\<^isup>\ x\<^isub>j - bnds"} provided @{term "x\<^isub>j"} is not in @{text "rhs"} + and is an existing nominal datatype with the free variable function @{text "fv\<^isup>\"}\\ $\bullet$ & @{term "{}"} otherwise \end{tabular} \end{center}