diff -r 46f59511b7bb -r d97fdabd9e2b src/HOL/Predicate_Compile_Examples/Specialisation_Examples.thy --- a/src/HOL/Predicate_Compile_Examples/Specialisation_Examples.thy Fri Sep 20 19:07:10 2024 +0200 +++ b/src/HOL/Predicate_Compile_Examples/Specialisation_Examples.thy Fri Sep 20 19:51:08 2024 +0200 @@ -95,24 +95,24 @@ section \Specialisation in POPLmark theory\ notation - Some ("\_\") + Some (\\_\\) notation - None ("\") + None (\\\) notation - length ("\_\") + length (\\_\\) notation - Cons ("_ \/ _" [66, 65] 65) + Cons (\_ \/ _\ [66, 65] 65) primrec - nth_el :: "'a list \ nat \ 'a option" ("_\_\" [90, 0] 91) + nth_el :: "'a list \ nat \ 'a option" (\_\_\\ [90, 0] 91) where "[]\i\ = \" | "(x # xs)\i\ = (case i of 0 \ \x\ | Suc j \ xs \j\)" -primrec assoc :: "('a \ 'b) list \ 'a \ 'b option" ("_\_\\<^sub>?" [90, 0] 91) +primrec assoc :: "('a \ 'b) list \ 'a \ 'b option" (\_\_\\<^sub>?\ [90, 0] 91) where "[]\a\\<^sub>? = \" | "(x # xs)\a\\<^sub>? = (if fst x = a then \snd x\ else xs\a\\<^sub>?)" @@ -125,8 +125,8 @@ datatype type = TVar nat | Top - | Fun type type (infixr "\" 200) - | TyAll type type ("(3\<:_./ _)" [0, 10] 10) + | Fun type type (infixr \\\ 200) + | TyAll type type (\(3\<:_./ _)\ [0, 10] 10) datatype binding = VarB type | TVarB type type_synonym env = "binding list" @@ -148,19 +148,19 @@ datatype trm = Var nat - | Abs type trm ("(3\:_./ _)" [0, 10] 10) - | TAbs type trm ("(3\<:_./ _)" [0, 10] 10) - | App trm trm (infixl "\" 200) - | TApp trm type (infixl "\\<^sub>\" 200) + | Abs type trm (\(3\:_./ _)\ [0, 10] 10) + | TAbs type trm (\(3\<:_./ _)\ [0, 10] 10) + | App trm trm (infixl \\\ 200) + | TApp trm type (infixl \\\<^sub>\\ 200) -primrec liftT :: "nat \ nat \ type \ type" ("\\<^sub>\") +primrec liftT :: "nat \ nat \ type \ type" (\\\<^sub>\\) where "\\<^sub>\ n k (TVar i) = (if i < k then TVar i else TVar (i + n))" | "\\<^sub>\ n k Top = Top" | "\\<^sub>\ n k (T \ U) = \\<^sub>\ n k T \ \\<^sub>\ n k U" | "\\<^sub>\ n k (\<:T. U) = (\<:\\<^sub>\ n k T. \\<^sub>\ n (k + 1) U)" -primrec lift :: "nat \ nat \ trm \ trm" ("\") +primrec lift :: "nat \ nat \ trm \ trm" (\\\) where "\ n k (Var i) = (if i < k then Var i else Var (i + n))" | "\ n k (\:T. t) = (\:\\<^sub>\ n k T. \ n (k + 1) t)" @@ -168,7 +168,7 @@ | "\ n k (s \ t) = \ n k s \ \ n k t" | "\ n k (t \\<^sub>\ T) = \ n k t \\<^sub>\ \\<^sub>\ n k T" -primrec substTT :: "type \ nat \ type \ type" ("_[_ \\<^sub>\ _]\<^sub>\" [300, 0, 0] 300) +primrec substTT :: "type \ nat \ type \ type" (\_[_ \\<^sub>\ _]\<^sub>\\ [300, 0, 0] 300) where "(TVar i)[k \\<^sub>\ S]\<^sub>\ = (if k < i then TVar (i - 1) else if i = k then \\<^sub>\ k 0 S else TVar i)" @@ -176,12 +176,12 @@ | "(T \ U)[k \\<^sub>\ S]\<^sub>\ = T[k \\<^sub>\ S]\<^sub>\ \ U[k \\<^sub>\ S]\<^sub>\" | "(\<:T. U)[k \\<^sub>\ S]\<^sub>\ = (\<:T[k \\<^sub>\ S]\<^sub>\. U[k+1 \\<^sub>\ S]\<^sub>\)" -primrec decT :: "nat \ nat \ type \ type" ("\\<^sub>\") +primrec decT :: "nat \ nat \ type \ type" (\\\<^sub>\\) where "\\<^sub>\ 0 k T = T" | "\\<^sub>\ (Suc n) k T = \\<^sub>\ n k (T[k \\<^sub>\ Top]\<^sub>\)" -primrec subst :: "trm \ nat \ trm \ trm" ("_[_ \ _]" [300, 0, 0] 300) +primrec subst :: "trm \ nat \ trm \ trm" (\_[_ \ _]\ [300, 0, 0] 300) where "(Var i)[k \ s] = (if k < i then Var (i - 1) else if i = k then \ k 0 s else Var i)" | "(t \ u)[k \ s] = t[k \ s] \ u[k \ s]" @@ -189,7 +189,7 @@ | "(\:T. t)[k \ s] = (\:\\<^sub>\ 1 k T. t[k+1 \ s])" | "(\<:T. t)[k \ s] = (\<:\\<^sub>\ 1 k T. t[k+1 \ s])" -primrec substT :: "trm \ nat \ type \ trm" ("_[_ \\<^sub>\ _]" [300, 0, 0] 300) +primrec substT :: "trm \ nat \ type \ trm" (\_[_ \\<^sub>\ _]\ [300, 0, 0] 300) where "(Var i)[k \\<^sub>\ S] = (if k < i then Var (i - 1) else Var i)" | "(t \ u)[k \\<^sub>\ S] = t[k \\<^sub>\ S] \ u[k \\<^sub>\ S]" @@ -197,23 +197,23 @@ | "(\:T. t)[k \\<^sub>\ S] = (\:T[k \\<^sub>\ S]\<^sub>\. t[k+1 \\<^sub>\ S])" | "(\<:T. t)[k \\<^sub>\ S] = (\<:T[k \\<^sub>\ S]\<^sub>\. t[k+1 \\<^sub>\ S])" -primrec liftE :: "nat \ nat \ env \ env" ("\\<^sub>e") +primrec liftE :: "nat \ nat \ env \ env" (\\\<^sub>e\) where "\\<^sub>e n k [] = []" | "\\<^sub>e n k (B \ \) = mapB (\\<^sub>\ n (k + \\\)) B \ \\<^sub>e n k \" -primrec substE :: "env \ nat \ type \ env" ("_[_ \\<^sub>\ _]\<^sub>e" [300, 0, 0] 300) +primrec substE :: "env \ nat \ type \ env" (\_[_ \\<^sub>\ _]\<^sub>e\ [300, 0, 0] 300) where "[][k \\<^sub>\ T]\<^sub>e = []" | "(B \ \)[k \\<^sub>\ T]\<^sub>e = mapB (\U. U[k + \\\ \\<^sub>\ T]\<^sub>\) B \ \[k \\<^sub>\ T]\<^sub>e" -primrec decE :: "nat \ nat \ env \ env" ("\\<^sub>e") +primrec decE :: "nat \ nat \ env \ env" (\\\<^sub>e\) where "\\<^sub>e 0 k \ = \" | "\\<^sub>e (Suc n) k \ = \\<^sub>e n k (\[k \\<^sub>\ Top]\<^sub>e)" inductive - well_formed :: "env \ type \ bool" ("_ \\<^sub>w\<^sub>f _" [50, 50] 50) + well_formed :: "env \ type \ bool" (\_ \\<^sub>w\<^sub>f _\ [50, 50] 50) where wf_TVar: "\\i\ = \TVarB T\ \ \ \\<^sub>w\<^sub>f TVar i" | wf_Top: "\ \\<^sub>w\<^sub>f Top" @@ -221,8 +221,8 @@ | wf_all: "\ \\<^sub>w\<^sub>f T \ TVarB T \ \ \\<^sub>w\<^sub>f U \ \ \\<^sub>w\<^sub>f (\<:T. U)" inductive - well_formedE :: "env \ bool" ("_ \\<^sub>w\<^sub>f" [50] 50) - and well_formedB :: "env \ binding \ bool" ("_ \\<^sub>w\<^sub>f\<^sub>B _" [50, 50] 50) + well_formedE :: "env \ bool" (\_ \\<^sub>w\<^sub>f\ [50] 50) + and well_formedB :: "env \ binding \ bool" (\_ \\<^sub>w\<^sub>f\<^sub>B _\ [50, 50] 50) where "\ \\<^sub>w\<^sub>f\<^sub>B B \ \ \\<^sub>w\<^sub>f type_ofB B" | wf_Nil: "[] \\<^sub>w\<^sub>f" @@ -238,7 +238,7 @@ "B \ \ \\<^sub>w\<^sub>f" inductive - subtyping :: "env \ type \ type \ bool" ("_ \ _ <: _" [50, 50, 50] 50) + subtyping :: "env \ type \ type \ bool" (\_ \ _ <: _\ [50, 50, 50] 50) where SA_Top: "\ \\<^sub>w\<^sub>f \ \ \\<^sub>w\<^sub>f S \ \ \ S <: Top" | SA_refl_TVar: "\ \\<^sub>w\<^sub>f \ \ \\<^sub>w\<^sub>f TVar i \ \ \ TVar i <: TVar i" @@ -249,7 +249,7 @@ \ \ (\<:S\<^sub>1. S\<^sub>2) <: (\<:T\<^sub>1. T\<^sub>2)" inductive - typing :: "env \ trm \ type \ bool" ("_ \ _ : _" [50, 50, 50] 50) + typing :: "env \ trm \ type \ bool" (\_ \ _ : _\ [50, 50, 50] 50) where T_Var: "\ \\<^sub>w\<^sub>f \ \\i\ = \VarB U\ \ T = \\<^sub>\ (Suc i) 0 U \ \ \ Var i : T" | T_Abs: "VarB T\<^sub>1 \ \ \ t\<^sub>2 : T\<^sub>2 \ \ \ (\:T\<^sub>1. t\<^sub>2) : T\<^sub>1 \ \\<^sub>\ 1 0 T\<^sub>2"