src/HOL/Nominal/nominal_permeq.ML
changeset 37678 0040bafffdef
parent 37391 476270a6c2dc
child 38715 6513ea67d95d
equal deleted inserted replaced
37677:c5a8b612e571 37678:0040bafffdef
   101             | _ => true)
   101             | _ => true)
   102   in
   102   in
   103     case redex of 
   103     case redex of 
   104         (* case pi o (f x) == (pi o f) (pi o x)          *)
   104         (* case pi o (f x) == (pi o f) (pi o x)          *)
   105         (Const("Nominal.perm",
   105         (Const("Nominal.perm",
   106           Type("fun",[Type("List.list",[Type(@{type_name "*"},[Type(n,_),_])]),_])) $ pi $ (f $ x)) => 
   106           Type("fun",[Type("List.list",[Type(@{type_name Product_Type.prod},[Type(n,_),_])]),_])) $ pi $ (f $ x)) => 
   107             (if (applicable_app f) then
   107             (if (applicable_app f) then
   108               let
   108               let
   109                 val name = Long_Name.base_name n
   109                 val name = Long_Name.base_name n
   110                 val at_inst = PureThy.get_thm sg ("at_" ^ name ^ "_inst")
   110                 val at_inst = PureThy.get_thm sg ("at_" ^ name ^ "_inst")
   111                 val pt_inst = PureThy.get_thm sg ("pt_" ^ name ^ "_inst")
   111                 val pt_inst = PureThy.get_thm sg ("pt_" ^ name ^ "_inst")
   188 (* folding the definition                                              *)
   188 (* folding the definition                                              *)
   189 
   189 
   190 fun perm_compose_simproc' sg ss redex =
   190 fun perm_compose_simproc' sg ss redex =
   191   (case redex of
   191   (case redex of
   192      (Const ("Nominal.perm", Type ("fun", [Type ("List.list", 
   192      (Const ("Nominal.perm", Type ("fun", [Type ("List.list", 
   193        [Type (@{type_name "*"}, [T as Type (tname,_),_])]),_])) $ pi1 $ (Const ("Nominal.perm", 
   193        [Type (@{type_name Product_Type.prod}, [T as Type (tname,_),_])]),_])) $ pi1 $ (Const ("Nominal.perm", 
   194          Type ("fun", [Type ("List.list", [Type (@{type_name "*"}, [U as Type (uname,_),_])]),_])) $ 
   194          Type ("fun", [Type ("List.list", [Type (@{type_name Product_Type.prod}, [U as Type (uname,_),_])]),_])) $ 
   195           pi2 $ t)) =>
   195           pi2 $ t)) =>
   196     let
   196     let
   197       val tname' = Long_Name.base_name tname
   197       val tname' = Long_Name.base_name tname
   198       val uname' = Long_Name.base_name uname
   198       val uname' = Long_Name.base_name uname
   199     in
   199     in