diff -r 46f59511b7bb -r d97fdabd9e2b src/HOL/Nominal/Examples/Pattern.thy --- a/src/HOL/Nominal/Examples/Pattern.thy Fri Sep 20 19:07:10 2024 +0200 +++ b/src/HOL/Nominal/Examples/Pattern.thy Fri Sep 20 19:51:08 2024 +0200 @@ -5,14 +5,14 @@ begin no_syntax - "_Map" :: "maplets => 'a \ 'b" ("(1[_])") + "_Map" :: "maplets => 'a \ 'b" (\(1[_])\) atom_decl name nominal_datatype ty = Atom nat - | Arrow ty ty (infixr "\" 200) - | TupleT ty ty (infixr "\" 210) + | Arrow ty ty (infixr \\\ 200) + | TupleT ty ty (infixr \\\ 210) lemma fresh_type [simp]: "(a::name) \ (T::ty)" by (induct T rule: ty.induct) (simp_all add: fresh_nat) @@ -25,22 +25,22 @@ nominal_datatype trm = Var name - | Tuple trm trm ("(1'\_,/ _'\)") + | Tuple trm trm (\(1'\_,/ _'\)\) | Abs ty "\name\trm" - | App trm trm (infixl "\" 200) + | App trm trm (infixl \\\ 200) | Let ty trm btrm and btrm = Base trm | Bind ty "\name\btrm" abbreviation - Abs_syn :: "name \ ty \ trm \ trm" ("(3\_:_./ _)" [0, 0, 10] 10) + Abs_syn :: "name \ ty \ trm \ trm" (\(3\_:_./ _)\ [0, 0, 10] 10) where "\x:T. t \ Abs T x t" datatype pat = PVar name ty - | PTuple pat pat ("(1'\\_,/ _'\\)") + | PTuple pat pat (\(1'\\_,/ _'\\)\) (* FIXME: The following should be done automatically by the nominal package *) overloading pat_perm \ "perm :: name prm \ pat \ pat" (unchecked) @@ -83,7 +83,7 @@ (* the following function cannot be defined using nominal_primrec, *) (* since variable parameters are currently not allowed. *) -primrec abs_pat :: "pat \ btrm \ btrm" ("(3\[_]./ _)" [0, 10] 10) +primrec abs_pat :: "pat \ btrm \ btrm" (\(3\[_]./ _)\ [0, 10] 10) where "(\[PVar x T]. t) = Bind T x t" | "(\[\\p, q\\]. t) = (\[p]. \[q]. t)" @@ -143,7 +143,7 @@ type_synonym ctx = "(name \ ty) list" inductive - ptyping :: "pat \ ty \ ctx \ bool" ("\ _ : _ \ _" [60, 60, 60] 60) + ptyping :: "pat \ ty \ ctx \ bool" (\\ _ : _ \ _\ [60, 60, 60] 60) where PVar: "\ PVar x T : T \ [(x, T)]" | PTuple: "\ p : T \ \\<^sub>1 \ \ q : U \ \\<^sub>2 \ \ \\p, q\\ : T \ U \ \\<^sub>2 @ \\<^sub>1" @@ -168,16 +168,16 @@ by (induct \) (auto simp add: fresh_ctxt_set_eq [symmetric]) abbreviation - "sub_ctx" :: "ctx \ ctx \ bool" ("_ \ _") + "sub_ctx" :: "ctx \ ctx \ bool" (\_ \ _\) where "\\<^sub>1 \ \\<^sub>2 \ \x. x \ set \\<^sub>1 \ x \ set \\<^sub>2" abbreviation - Let_syn :: "pat \ trm \ trm \ trm" ("(LET (_ =/ _)/ IN (_))" 10) + Let_syn :: "pat \ trm \ trm \ trm" (\(LET (_ =/ _)/ IN (_))\ 10) where "LET p = t IN u \ Let (pat_type p) t (\[p]. Base u)" -inductive typing :: "ctx \ trm \ ty \ bool" ("_ \ _ : _" [60, 60, 60] 60) +inductive typing :: "ctx \ trm \ ty \ bool" (\_ \ _ : _\ [60, 60, 60] 60) where Var [intro]: "valid \ \ (x, T) \ set \ \ \ \ Var x : T" | Tuple [intro]: "\ \ t : T \ \ \ u : U \ \ \ \t, u\ : T \ U" @@ -268,7 +268,7 @@ qed auto inductive - match :: "pat \ trm \ (name \ trm) list \ bool" ("\ _ \ _ \ _" [50, 50, 50] 50) + match :: "pat \ trm \ (name \ trm) list \ bool" (\\ _ \ _ \ _\ [50, 50, 50] 50) where PVar: "\ PVar x T \ t \ [(x, t)]" | PProd: "\ p \ t \ \ \ \ q \ u \ \' \ \ \\p, q\\ \ \t, u\ \ \ @ \'" @@ -287,8 +287,8 @@ by (induct \) (auto simp add: eqvts) nominal_primrec - psubst :: "(name \ trm) list \ trm \ trm" ("_\_\" [95,0] 210) - and psubstb :: "(name \ trm) list \ btrm \ btrm" ("_\_\\<^sub>b" [95,0] 210) + psubst :: "(name \ trm) list \ trm \ trm" (\_\_\\ [95,0] 210) + and psubstb :: "(name \ trm) list \ btrm \ btrm" (\_\_\\<^sub>b\ [95,0] 210) where "\\Var x\ = (lookup \ x)" | "\\t \ u\ = \\t\ \ \\u\" @@ -320,12 +320,12 @@ (simp_all add: eqvts fresh_bij) abbreviation - subst :: "trm \ name \ trm \ trm" ("_[_\_]" [100,0,0] 100) + subst :: "trm \ name \ trm \ trm" (\_[_\_]\ [100,0,0] 100) where "t[x\t'] \ [(x,t')]\t\" abbreviation - substb :: "btrm \ name \ trm \ btrm" ("_[_\_]\<^sub>b" [100,0,0] 100) + substb :: "btrm \ name \ trm \ btrm" (\_[_\_]\<^sub>b\ [100,0,0] 100) where "t[x\t']\<^sub>b \ [(x,t')]\t\\<^sub>b" @@ -525,7 +525,7 @@ lemmas match_type = match_type_aux [where \\<^sub>1="[]", simplified] -inductive eval :: "trm \ trm \ bool" ("_ \ _" [60,60] 60) +inductive eval :: "trm \ trm \ bool" (\_ \ _\ [60,60] 60) where TupleL: "t \ t' \ \t, u\ \ \t', u\" | TupleR: "u \ u' \ \t, u\ \ \t, u'\"