(*<*)
theory Paper imports Lambda_Exec begin
notation (latex output)
Name ("\<nu>_")
and subst ("_ [_ := _]" [90, 90, 90] 90)
and Lam ("\<^raw:$\lambda$>_. _" [50, 50] 50)
(* and atom ("_")*)
and swap ("'(_ _')" [1000, 1000] 1000)
(*and Umn ("\<^raw:$U^{\mbox{>_\<^raw:}}_{\mbox{>_\<^raw:}}$>" [205,205] 200)*)
and all (binder "\<forall>" 10)
and fresh ("_ \<FRESH> _" [55, 55] 55)
and Set.empty ("\<emptyset>")
declare [[show_question_marks = false]]
(*>*)
section {* Introduction *}
section {* General Algorithm *}
section {* Executing the Foundations of Nominal Logic *}
subsection {* Executable Permutations *}
text {*
\begin{itemize}
\item Definitions of permutation as a list: application of a permutation,
validity of a permutation and equality of permutations
@{thm [display, indent=5] perm_apply_def}
@{thm [display, indent=5] valid_perm_def}
@{thm [display, indent=5] perm_eq_def}
\item Quotient type
@{text [display, indent=5] "quotient_type 'a gperm = \"('a \<times> 'a) list\" / partial: \"perm_eq\""}
\item Definitions of composing permutations and inverse permutation as well
as showing that:
@{text [display, indent=5] "instantiation gperm :: (type) group_add"}
\item Proper representation and abstraction functions to make the @{text "code_abstype"}
@{thm [display, indent=5] dest_perm_raw_def}
@{thm [display, indent=5] mk_perm_raw_def}
\item Code abstract equations of permutation composition, inverse, zero, swapping etc
\end{itemize} *}
subsection {* Sort-respecting Permutations *}
text {*
\begin{itemize}
\item The type of sorted atoms
\item Definition of sort-respecting
@{thm [display, indent=5] sort_respecting_def}
\item typedef and definitions of the basic operations
\item showing that the sort-respecting ones are also a group\_add and that the
code equations can be reused.
\end{itemize}
*}
subsection {* Concrete atom types *}
text {*
\begin{itemize}
\item bijection to natural numbers
@{thm [display, indent=5] Name_def}
@{thm [display, indent=5] nat_of_name_def}
\item @{text "code_datatype"}
\item equality of variables and a code equation for concrete variables
@{thm [display, indent=5] equal_name_def}
@{thm [display, indent=5] equal_name_code}
\item code equations for @{term atom} and application of a permutation
@{thm [display, indent=5] atom_name_code}
@{thm [display, indent=5] permute_name_code}
\end{itemize}
*}
section {* Executing the Lambda Terms *}
text {*
\begin{itemize}
\item Defining a representation type: LN
\item Abstraction with an accumulator
@{thm [display, indent=5] ln_lam_aux.simps}
@{thm [display, indent=5] ln_lam_def}
\item Representation, with a helper
@{thm [display, indent=5] subst_ln_nat.simps}
@{thm [display, indent=5] lam_ln_ex.simps}
\item A helper function \& proof that equal:
@{thm [display, indent=5] lam_ln_aux.simps}
@{thm [display, indent=5] lam_ln_def}
@{thm [display, indent=5] lam_ln_ex}
\item Code abstype
@{thm [display, indent=5] ln_abstype}
\item equality and permutations for the abstract type
@{thm [display, indent=5] equal_lam_def}
@{thm [display, indent=5] lam_ln_ex.eqvt[symmetric]}
\end{itemize}
*}
subsection {* Executing substitution *}
text {*
\begin{itemize}
\item Substitution on the representation:
@{thm [display, indent=5] subst_ln.simps}
\item equality of substitutions:
@{thm [display, indent=5] subst_code}
\end{itemize}
Example of execution:
@{text value} @{term "subst ((N0 \<leftrightarrow> N1) \<bullet> (App (Var N0) (Lam [N1]. (Var N1)))) N1 (Var N0)"}
*}
section {* Conclusion\label{sec:conclusion} *}
subsection {* Future Work *}
text {*
Efficiency: Use more efficient representation for permutations than
lists. Might be useful for bigger permutations, but for permuttaions
of up to 3 elements does not make much sense *}
subsection {* Related Work *}
text {*
Locally Nameless~\cite{LocallyNameless}
*}
(*<*)
end
(*>*)