Nominal/Nominal2_Eqvt.thy
author Cezary Kaliszyk <kaliszyk@in.tum.de>
Sat, 19 Feb 2011 09:31:22 +0900
changeset 2728 1feef59f3aa4
parent 2725 fafc461bdb9e
child 2733 5f6fefdbf055
permissions -rw-r--r--
typeschemes/subst
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
     1
(*  Title:      Nominal2_Eqvt
1810
894930834ca8 fixed bug in thmdecls with destructing Trueprop; some initial infrastructure for eqvt-theorems of the form _ ==> _
Christian Urban <urbanc@in.tum.de>
parents: 1803
diff changeset
     2
    Author:     Brian Huffman, 
894930834ca8 fixed bug in thmdecls with destructing Trueprop; some initial infrastructure for eqvt-theorems of the form _ ==> _
Christian Urban <urbanc@in.tum.de>
parents: 1803
diff changeset
     3
    Author:     Christian Urban
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
     4
1869
Christian Urban <urbanc@in.tum.de>
parents: 1867
diff changeset
     5
    Equivariance, supp and freshness lemmas for various operators 
Christian Urban <urbanc@in.tum.de>
parents: 1867
diff changeset
     6
    (contains many, but not all such lemmas).
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
     7
*)
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
     8
theory Nominal2_Eqvt
1933
9eab1dfc14d2 moved lemmas from FSet.thy to do with atom to Nominal2_Base, and to do with 'a::at set to Nominal2_Atoms; moved Nominal2_Eqvt.thy one up to be loaded before Nominal2_Atoms
Christian Urban <urbanc@in.tum.de>
parents: 1872
diff changeset
     9
imports Nominal2_Base 
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    10
uses ("nominal_thmdecls.ML")
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    11
     ("nominal_permeq.ML")
1833
2050b5723c04 added a library for basic nominal functions; separated nominal_eqvt file
Christian Urban <urbanc@in.tum.de>
parents: 1827
diff changeset
    12
     ("nominal_eqvt.ML")
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    13
begin
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    14
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    15
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    16
section {* Permsimp and Eqvt infrastructure *}
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    17
1869
Christian Urban <urbanc@in.tum.de>
parents: 1867
diff changeset
    18
text {* Setup of the theorem attributes @{text eqvt} and @{text eqvt_raw} *}
Christian Urban <urbanc@in.tum.de>
parents: 1867
diff changeset
    19
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    20
use "nominal_thmdecls.ML"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    21
setup "Nominal_ThmDecls.setup"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    22
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    23
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    24
section {* eqvt lemmas *}
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    25
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    26
lemmas [eqvt] =
2663
54aade5d0fe6 moved high level code from LamTest into the main libraries.
Christian Urban <urbanc@in.tum.de>
parents: 2658
diff changeset
    27
  conj_eqvt Not_eqvt ex_eqvt all_eqvt ex1_eqvt imp_eqvt uminus_eqvt
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    28
  imp_eqvt[folded induct_implies_def]
2635
64b4cb2c2bf8 simple cases for string rule inductions
Christian Urban <urbanc@in.tum.de>
parents: 2591
diff changeset
    29
  all_eqvt[folded induct_forall_def]
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    30
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    31
  (* nominal *)
2470
bdb1eab47161 moved everything out of Nominal_Supp
Christian Urban <urbanc@in.tum.de>
parents: 2467
diff changeset
    32
  supp_eqvt fresh_eqvt fresh_star_eqvt add_perm_eqvt atom_eqvt 
2467
67b3933c3190 got rid of Nominal_Atoms (folded into Nominal2_Base)
Christian Urban <urbanc@in.tum.de>
parents: 2466
diff changeset
    33
  swap_eqvt flip_eqvt
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    34
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    35
  (* datatypes *)
2676
028d5511c15f some tryes about substitution over type-schemes
Christian Urban <urbanc@in.tum.de>
parents: 2672
diff changeset
    36
  Pair_eqvt permute_list.simps permute_option.simps 
028d5511c15f some tryes about substitution over type-schemes
Christian Urban <urbanc@in.tum.de>
parents: 2672
diff changeset
    37
  permute_sum.simps
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    38
2470
bdb1eab47161 moved everything out of Nominal_Supp
Christian Urban <urbanc@in.tum.de>
parents: 2467
diff changeset
    39
  (* sets *)
2672
7e7662890477 removed finiteness assumption from set_rename_perm
Christian Urban <urbanc@in.tum.de>
parents: 2668
diff changeset
    40
  mem_eqvt empty_eqvt insert_eqvt set_eqvt inter_eqvt
2565
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
    41
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
    42
  (* fsets *)
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
    43
  permute_fset fset_eqvt
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
    44
2635
64b4cb2c2bf8 simple cases for string rule inductions
Christian Urban <urbanc@in.tum.de>
parents: 2591
diff changeset
    45
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    46
text {* helper lemmas for the perm_simp *}
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    47
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    48
definition
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    49
  "unpermute p = permute (- p)"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    50
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    51
lemma eqvt_apply:
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    52
  fixes f :: "'a::pt \<Rightarrow> 'b::pt" 
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    53
  and x :: "'a::pt"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    54
  shows "p \<bullet> (f x) \<equiv> (p \<bullet> f) (p \<bullet> x)"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    55
  unfolding permute_fun_def by simp
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    56
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    57
lemma eqvt_lambda:
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    58
  fixes f :: "'a::pt \<Rightarrow> 'b::pt"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    59
  shows "p \<bullet> (\<lambda>x. f x) \<equiv> (\<lambda>x. p \<bullet> (f (unpermute p x)))"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    60
  unfolding permute_fun_def unpermute_def by simp
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    61
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    62
lemma eqvt_bound:
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    63
  shows "p \<bullet> unpermute p x \<equiv> x"
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    64
  unfolding unpermute_def by simp
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    65
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    66
text {* provides perm_simp methods *}
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    67
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    68
use "nominal_permeq.ML"
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
    69
setup Nominal_Permeq.setup
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
    70
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
    71
method_setup perm_simp =
1947
51f411b1197d tuned and cleaned
Christian Urban <urbanc@in.tum.de>
parents: 1934
diff changeset
    72
 {* Nominal_Permeq.args_parser >> Nominal_Permeq.perm_simp_meth *}
51f411b1197d tuned and cleaned
Christian Urban <urbanc@in.tum.de>
parents: 1934
diff changeset
    73
 {* pushes permutations inside. *}
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
    74
1801
6d2a39db3862 added more robust tracing infrastructure; a strict version of the eqvt_tac raises an error if not all permutations cannot be analysed
Christian Urban <urbanc@in.tum.de>
parents: 1800
diff changeset
    75
method_setup perm_strict_simp =
1947
51f411b1197d tuned and cleaned
Christian Urban <urbanc@in.tum.de>
parents: 1934
diff changeset
    76
 {* Nominal_Permeq.args_parser >> Nominal_Permeq.perm_strict_simp_meth *}
51f411b1197d tuned and cleaned
Christian Urban <urbanc@in.tum.de>
parents: 1934
diff changeset
    77
 {* pushes permutations inside, raises an error if it cannot solve all permutations. *}
1801
6d2a39db3862 added more robust tracing infrastructure; a strict version of the eqvt_tac raises an error if not all permutations cannot be analysed
Christian Urban <urbanc@in.tum.de>
parents: 1800
diff changeset
    78
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    79
(* the normal version of this lemma would cause loops *)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    80
lemma permute_eqvt_raw[eqvt_raw]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    81
  shows "p \<bullet> permute \<equiv> permute"
2479
a9b6a00b1ba0 updated to Isabelle Sept 16
Christian Urban <urbanc@in.tum.de>
parents: 2470
diff changeset
    82
apply(simp add: fun_eq_iff permute_fun_def)
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    83
apply(subst permute_eqvt)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    84
apply(simp)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    85
done
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    86
2565
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
    87
subsection {* Equivariance of Logical Operators *}
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    88
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    89
lemma eq_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    90
  shows "p \<bullet> (x = y) \<longleftrightarrow> (p \<bullet> x) = (p \<bullet> y)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    91
  unfolding permute_eq_iff permute_bool_def ..
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    92
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    93
lemma if_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    94
  shows "p \<bullet> (if b then x else y) = (if p \<bullet> b then p \<bullet> x else p \<bullet> y)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    95
  by (simp add: permute_fun_def permute_bool_def)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    96
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    97
lemma True_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    98
  shows "p \<bullet> True = True"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
    99
  unfolding permute_bool_def ..
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   100
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   101
lemma False_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   102
  shows "p \<bullet> False = False"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   103
  unfolding permute_bool_def ..
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   104
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   105
lemma disj_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   106
  shows "p \<bullet> (A \<or> B) = ((p \<bullet> A) \<or> (p \<bullet> B))"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   107
  by (simp add: permute_bool_def)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   108
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   109
lemma all_eqvt2:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   110
  shows "p \<bullet> (\<forall>x. P x) = (\<forall>x. p \<bullet> P (- p \<bullet> x))"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   111
  by (perm_simp add: permute_minus_cancel) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   112
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   113
lemma ex_eqvt2:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   114
  shows "p \<bullet> (\<exists>x. P x) = (\<exists>x. p \<bullet> P (- p \<bullet> x))"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   115
  by (perm_simp add: permute_minus_cancel) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   116
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   117
lemma ex1_eqvt2:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   118
  shows "p \<bullet> (\<exists>!x. P x) = (\<exists>!x. p \<bullet> P (- p \<bullet> x))"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   119
  by (perm_simp add: permute_minus_cancel) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   120
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   121
lemma the_eqvt:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   122
  assumes unique: "\<exists>!x. P x"
2651
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   123
  shows "(p \<bullet> (THE x. P x)) = (THE x. (p \<bullet> P) x)"
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   124
  apply(rule the1_equality [symmetric])
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   125
  apply(rule_tac p="-p" in permute_boolE)
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   126
  apply(perm_simp add: permute_minus_cancel)
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   127
  apply(rule unique)
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   128
  apply(rule_tac p="-p" in permute_boolE)
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   129
  apply(perm_simp add: permute_minus_cancel)
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   130
  apply(rule theI'[OF unique])
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   131
  done
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   132
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   133
lemma the_eqvt2:
4aa72a88b2c1 equivariance of THE_default under the uniqueness assumption
Christian Urban <urbanc@in.tum.de>
parents: 2642
diff changeset
   134
  assumes unique: "\<exists>!x. P x"
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   135
  shows "(p \<bullet> (THE x. P x)) = (THE x. p \<bullet> P (- p \<bullet> x))"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   136
  apply(rule the1_equality [symmetric])
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   137
  apply(simp add: ex1_eqvt2[symmetric])
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   138
  apply(simp add: permute_bool_def unique)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   139
  apply(simp add: permute_bool_def)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   140
  apply(rule theI'[OF unique])
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   141
  done
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   142
2565
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   143
subsection {* Equivariance Set Operations *}
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   144
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   145
lemma not_mem_eqvt:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   146
  shows "p \<bullet> (x \<notin> A) \<longleftrightarrow> (p \<bullet> x) \<notin> (p \<bullet> A)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   147
  by (perm_simp) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   148
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   149
lemma Collect_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   150
  shows "p \<bullet> {x. P x} = {x. (p \<bullet> P) x}"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   151
  unfolding Collect_def permute_fun_def ..
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   152
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   153
lemma Collect_eqvt2:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   154
  shows "p \<bullet> {x. P x} = {x. p \<bullet> (P (-p \<bullet> x))}"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   155
  by (perm_simp add: permute_minus_cancel) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   156
2002
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   157
lemma Bex_eqvt[eqvt]:
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   158
  shows "p \<bullet> (\<exists>x \<in> S. P x) = (\<exists>x \<in> (p \<bullet> S). (p \<bullet> P) x)"
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   159
  unfolding Bex_def
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   160
  by (perm_simp) (rule refl)
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   161
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   162
lemma Ball_eqvt[eqvt]:
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   163
  shows "p \<bullet> (\<forall>x \<in> S. P x) = (\<forall>x \<in> (p \<bullet> S). (p \<bullet> P) x)"
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   164
  unfolding Ball_def
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   165
  by (perm_simp) (rule refl)
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   166
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   167
lemma UNIV_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   168
  shows "p \<bullet> UNIV = UNIV"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   169
  unfolding UNIV_def
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   170
  by (perm_simp) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   171
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   172
lemma union_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   173
  shows "p \<bullet> (A \<union> B) = (p \<bullet> A) \<union> (p \<bullet> B)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   174
  unfolding Un_def
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   175
  by (perm_simp) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   176
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   177
lemma Diff_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   178
  fixes A B :: "'a::pt set"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   179
  shows "p \<bullet> (A - B) = p \<bullet> A - p \<bullet> B"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   180
  unfolding set_diff_eq
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   181
  by (perm_simp) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   182
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   183
lemma Compl_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   184
  fixes A :: "'a::pt set"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   185
  shows "p \<bullet> (- A) = - (p \<bullet> A)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   186
  unfolding Compl_eq_Diff_UNIV
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   187
  by (perm_simp) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   188
2658
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   189
lemma subset_eqvt[eqvt]:
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   190
  shows "p \<bullet> (S \<subseteq> T) \<longleftrightarrow> (p \<bullet> S) \<subseteq> (p \<bullet> T)"
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   191
  unfolding subset_eq
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   192
  by (perm_simp) (rule refl)
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   193
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   194
lemma psubset_eqvt[eqvt]:
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   195
  shows "p \<bullet> (S \<subset> T) \<longleftrightarrow> (p \<bullet> S) \<subset> (p \<bullet> T)"
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   196
  unfolding psubset_eq
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   197
  by (perm_simp) (rule refl)
b4472ebd7fad added eqvt_lemmas for subset and psubset
Christian Urban <urbanc@in.tum.de>
parents: 2651
diff changeset
   198
2723
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   199
lemma image_eqvt[eqvt]:
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
   200
  shows "p \<bullet> (f ` A) = (p \<bullet> f) ` (p \<bullet> A)"
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
   201
  unfolding permute_set_eq_image
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
   202
  unfolding permute_fun_def [where f=f]
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
   203
  by (simp add: image_image)
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
   204
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   205
lemma vimage_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   206
  shows "p \<bullet> (f -` A) = (p \<bullet> f) -` (p \<bullet> A)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   207
  unfolding vimage_def
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   208
  by (perm_simp) (rule refl)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   209
2002
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   210
lemma Union_eqvt[eqvt]:
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   211
  shows "p \<bullet> (\<Union> S) = \<Union> (p \<bullet> S)"
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   212
  unfolding Union_eq 
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   213
  by (perm_simp) (rule refl)
74d869595fed added eqvt-lemmas for Bex, Ball and Union
Christian Urban <urbanc@in.tum.de>
parents: 1995
diff changeset
   214
2723
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   215
lemma Sigma_eqvt:
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   216
  shows "(p \<bullet> (X \<times> Y)) = (p \<bullet> X) \<times> (p \<bullet> Y)"
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   217
unfolding Sigma_def
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   218
unfolding UNION_eq_Union_image
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   219
by (perm_simp) (rule refl)
281ef8686654 added eqvt for cartesian products
Christian Urban <urbanc@in.tum.de>
parents: 2682
diff changeset
   220
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   221
lemma finite_permute_iff:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   222
  shows "finite (p \<bullet> A) \<longleftrightarrow> finite A"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   223
  unfolding permute_set_eq_vimage
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   224
  using bij_permute by (rule finite_vimage_iff)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   225
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   226
lemma finite_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   227
  shows "p \<bullet> finite A = finite (p \<bullet> A)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   228
  unfolding finite_permute_iff permute_bool_def ..
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   229
2466
47c840599a6b cleaned a bit various thy-files in Nominal-General
Christian Urban <urbanc@in.tum.de>
parents: 2310
diff changeset
   230
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   231
section {* List Operations *}
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   232
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   233
lemma append_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   234
  shows "p \<bullet> (xs @ ys) = (p \<bullet> xs) @ (p \<bullet> ys)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   235
  by (induct xs) auto
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   236
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   237
lemma rev_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   238
  shows "p \<bullet> (rev xs) = rev (p \<bullet> xs)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   239
  by (induct xs) (simp_all add: append_eqvt)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   240
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   241
lemma supp_rev:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   242
  shows "supp (rev xs) = supp xs"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   243
  by (induct xs) (auto simp add: supp_append supp_Cons supp_Nil)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   244
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   245
lemma fresh_rev:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   246
  shows "a \<sharp> rev xs \<longleftrightarrow> a \<sharp> xs"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   247
  by (induct xs) (auto simp add: fresh_append fresh_Cons fresh_Nil)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   248
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   249
lemma map_eqvt[eqvt]: 
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   250
  shows "p \<bullet> (map f xs) = map (p \<bullet> f) (p \<bullet> xs)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   251
  by (induct xs) (simp_all, simp only: permute_fun_app_eq)
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   252
2682
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   253
lemma removeAll_eqvt[eqvt]:
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   254
  shows "p \<bullet> (removeAll x xs) = removeAll (p \<bullet> x) (p \<bullet> xs)"
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   255
  by (induct xs) (auto)
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   256
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   257
lemma supp_removeAll:
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   258
  fixes x::"atom"
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   259
  shows "supp (removeAll x xs) = supp xs - {x}"
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   260
  by (induct xs)
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   261
     (auto simp add: supp_Nil supp_Cons supp_atom)
2873b3230c44 added eqvt and supp lemma for removeAll (function from List.thy)
Christian Urban <urbanc@in.tum.de>
parents: 2676
diff changeset
   262
2724
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   263
lemma filter_eqvt[eqvt]:
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   264
  shows "p \<bullet> (filter f xs) = filter (p \<bullet> f) (p \<bullet> xs)"
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   265
apply(induct xs)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   266
apply(simp)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   267
apply(simp only: filter.simps permute_list.simps if_eqvt)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   268
apply(simp only: permute_fun_app_eq)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   269
done
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   270
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   271
lemma distinct_eqvt[eqvt]:
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   272
  shows "p \<bullet> (distinct xs) = distinct (p \<bullet> xs)"
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   273
apply(induct xs)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   274
apply(simp add: permute_bool_def)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   275
apply(simp add: conj_eqvt Not_eqvt mem_eqvt set_eqvt)
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   276
done
e6bf6790da7d added eqvt lemmas for filter and distinct
Christian Urban <urbanc@in.tum.de>
parents: 2723
diff changeset
   277
2725
fafc461bdb9e added eqvt for length
Christian Urban <urbanc@in.tum.de>
parents: 2724
diff changeset
   278
lemma length_eqvt[eqvt]:
fafc461bdb9e added eqvt for length
Christian Urban <urbanc@in.tum.de>
parents: 2724
diff changeset
   279
  shows "p \<bullet> (length xs) = length (p \<bullet> xs)"
fafc461bdb9e added eqvt for length
Christian Urban <urbanc@in.tum.de>
parents: 2724
diff changeset
   280
by (induct xs) (simp_all add: permute_pure)
fafc461bdb9e added eqvt for length
Christian Urban <urbanc@in.tum.de>
parents: 2724
diff changeset
   281
2565
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   282
2642
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   283
subsection {* Equivariance Finite-Set Operations *}
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   284
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   285
lemma in_fset_eqvt[eqvt]:
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   286
  shows "(p \<bullet> (x |\<in>| S)) = ((p \<bullet> x) |\<in>| (p \<bullet> S))"
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   287
unfolding in_fset
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   288
by (perm_simp) (simp)
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   289
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   290
lemma union_fset_eqvt[eqvt]:
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   291
  shows "(p \<bullet> (S |\<union>| T)) = ((p \<bullet> S) |\<union>| (p \<bullet> T))"
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   292
by (induct S) (simp_all)
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   293
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   294
lemma supp_union_fset:
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   295
  fixes S T::"'a::fs fset"
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   296
  shows "supp (S |\<union>| T) = supp S \<union> supp T"
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   297
by (induct S) (auto)
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   298
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   299
lemma fresh_union_fset:
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   300
  fixes S T::"'a::fs fset"
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   301
  shows "a \<sharp> S |\<union>| T \<longleftrightarrow> a \<sharp> S \<and> a \<sharp> T"
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   302
unfolding fresh_def
Christian Urban <urbanc@in.tum.de>
parents: 2635
diff changeset
   303
by (simp add: supp_union_fset)
2565
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   304
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   305
lemma map_fset_eqvt[eqvt]: 
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   306
  shows "p \<bullet> (map_fset f S) = map_fset (p \<bullet> f) (p \<bullet> S)"
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   307
  by (lifting map_eqvt)
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   308
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   309
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   310
subsection {* Product Operations *}
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   311
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   312
lemma fst_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   313
  "p \<bullet> (fst x) = fst (p \<bullet> x)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   314
 by (cases x) simp
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   315
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   316
lemma snd_eqvt[eqvt]:
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   317
  "p \<bullet> (snd x) = snd (p \<bullet> x)"
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   318
 by (cases x) simp
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   319
2080
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   320
lemma split_eqvt[eqvt]: 
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   321
  shows "p \<bullet> (split P x) = split (p \<bullet> P) (p \<bullet> x)"
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   322
  unfolding split_def
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   323
  by (perm_simp) (rule refl)
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   324
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   325
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   326
section {* Test cases *}
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   327
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   328
2009
4f7d7cbd4bc8 removed duplicate eqvt attribute
Christian Urban <urbanc@in.tum.de>
parents: 2002
diff changeset
   329
declare [[trace_eqvt = false]]
4f7d7cbd4bc8 removed duplicate eqvt attribute
Christian Urban <urbanc@in.tum.de>
parents: 2002
diff changeset
   330
(* declare [[trace_eqvt = true]] *)
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   331
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   332
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   333
  fixes B::"'a::pt"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   334
  shows "p \<bullet> (B = C)"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   335
apply(perm_simp)
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   336
oops
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   337
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   338
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   339
  fixes B::"bool"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   340
  shows "p \<bullet> (B = C)"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   341
apply(perm_simp)
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   342
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   343
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   344
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   345
  fixes B::"bool"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   346
  shows "p \<bullet> (A \<longrightarrow> B = C)"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   347
apply (perm_simp) 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   348
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   349
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   350
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   351
  shows "p \<bullet> (\<lambda>(x::'a::pt). A \<longrightarrow> (B::'a \<Rightarrow> bool) x = C) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   352
apply(perm_simp)
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   353
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   354
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   355
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   356
  shows "p \<bullet> (\<lambda>B::bool. A \<longrightarrow> (B = C)) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   357
apply (perm_simp)
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   358
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   359
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   360
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   361
  shows "p \<bullet> (\<lambda>x y. \<exists>z. x = z \<and> x = y \<longrightarrow> z \<noteq> x) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   362
apply (perm_simp)
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   363
oops
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   364
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   365
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   366
  shows "p \<bullet> (\<lambda>f x. f (g (f x))) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   367
apply (perm_simp)
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   368
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   369
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   370
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   371
  fixes p q::"perm"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   372
  and   x::"'a::pt"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   373
  shows "p \<bullet> (q \<bullet> x) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   374
apply(perm_simp)
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   375
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   376
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   377
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   378
  fixes p q r::"perm"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   379
  and   x::"'a::pt"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   380
  shows "p \<bullet> (q \<bullet> r \<bullet> x) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   381
apply(perm_simp)
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   382
oops
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   383
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   384
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   385
  fixes p r::"perm"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   386
  shows "p \<bullet> (\<lambda>q::perm. q \<bullet> (r \<bullet> x)) = foo"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   387
apply (perm_simp)
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   388
oops
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   389
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   390
lemma 
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   391
  fixes C D::"bool"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   392
  shows "B (p \<bullet> (C = D))"
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   393
apply(perm_simp)
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   394
oops
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   395
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   396
declare [[trace_eqvt = false]]
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   397
2200
31f1ec832d39 fixed bug where perm_simp 'forgets' how to prove equivariance for the empty set
Christian Urban <urbanc@in.tum.de>
parents: 2129
diff changeset
   398
text {* there is no raw eqvt-rule for The *}
1800
78fdc6b36a1c changed the eqvt-tac to move only outermost permutations inside; added tracing infrastructure for the eqvt-tac
Christian Urban <urbanc@in.tum.de>
parents: 1774
diff changeset
   399
lemma "p \<bullet> (THE x. P x) = foo"
1867
f4477d3fe520 preliminary parser for perm_simp metod
Christian Urban <urbanc@in.tum.de>
parents: 1866
diff changeset
   400
apply(perm_strict_simp exclude: The)
f4477d3fe520 preliminary parser for perm_simp metod
Christian Urban <urbanc@in.tum.de>
parents: 1866
diff changeset
   401
apply(perm_simp exclude: The)
1062
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   402
oops
dfea9e739231 rollback of the test
Christian Urban <urbanc@in.tum.de>
parents: 1061
diff changeset
   403
2064
2725853f43b9 solved the problem with equivariance by first eta-normalising the goal
Christian Urban <urbanc@in.tum.de>
parents: 2009
diff changeset
   404
lemma 
2725853f43b9 solved the problem with equivariance by first eta-normalising the goal
Christian Urban <urbanc@in.tum.de>
parents: 2009
diff changeset
   405
  fixes P :: "(('b \<Rightarrow> bool) \<Rightarrow> ('b::pt)) \<Rightarrow> ('a::pt)"
2080
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   406
  shows "p \<bullet> (P The) = foo"
2064
2725853f43b9 solved the problem with equivariance by first eta-normalising the goal
Christian Urban <urbanc@in.tum.de>
parents: 2009
diff changeset
   407
apply(perm_simp exclude: The)
2725853f43b9 solved the problem with equivariance by first eta-normalising the goal
Christian Urban <urbanc@in.tum.de>
parents: 2009
diff changeset
   408
oops
2725853f43b9 solved the problem with equivariance by first eta-normalising the goal
Christian Urban <urbanc@in.tum.de>
parents: 2009
diff changeset
   409
2080
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   410
lemma
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   411
  fixes  P :: "('a::pt) \<Rightarrow> ('b::pt) \<Rightarrow> bool"
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   412
  shows "p \<bullet> (\<lambda>(a, b). P a b) = (\<lambda>(a, b). (p \<bullet> P) a b)"
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   413
apply(perm_simp)
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   414
oops
0532006ec7ec added eqvt-lemma for split; changed semantics of perm_simp: excluded stands for constants about which no complaint is written out...eqvt_apply is now always applied
Christian Urban <urbanc@in.tum.de>
parents: 2064
diff changeset
   415
1953
186d8486dfd5 rewrote eqvts_raw to be a symtab, that can be looked up
Christian Urban <urbanc@in.tum.de>
parents: 1947
diff changeset
   416
thm eqvts
186d8486dfd5 rewrote eqvts_raw to be a symtab, that can be looked up
Christian Urban <urbanc@in.tum.de>
parents: 1947
diff changeset
   417
thm eqvts_raw
186d8486dfd5 rewrote eqvts_raw to be a symtab, that can be looked up
Christian Urban <urbanc@in.tum.de>
parents: 1947
diff changeset
   418
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   419
ML {* Nominal_ThmDecls.is_eqvt @{context} @{term "supp"} *}
1953
186d8486dfd5 rewrote eqvts_raw to be a symtab, that can be looked up
Christian Urban <urbanc@in.tum.de>
parents: 1947
diff changeset
   420
186d8486dfd5 rewrote eqvts_raw to be a symtab, that can be looked up
Christian Urban <urbanc@in.tum.de>
parents: 1947
diff changeset
   421
2565
6bf332360510 moved most material fron Nominal2_FSet into the Nominal_Base theory
Christian Urban <urbanc@in.tum.de>
parents: 2479
diff changeset
   422
section {* automatic equivariance procedure for inductive definitions *}
1995
652f310f0dba reorganised eqvt-file (now uses perm_simp already)
Christian Urban <urbanc@in.tum.de>
parents: 1971
diff changeset
   423
1835
636de31888a6 tuned and removed dead code
Christian Urban <urbanc@in.tum.de>
parents: 1833
diff changeset
   424
use "nominal_eqvt.ML"
1833
2050b5723c04 added a library for basic nominal functions; separated nominal_eqvt file
Christian Urban <urbanc@in.tum.de>
parents: 1827
diff changeset
   425
1315
43d6e3730353 Add image_eqvt and atom_eqvt to eqvt bases.
Cezary Kaliszyk <kaliszyk@in.tum.de>
parents: 1258
diff changeset
   426
end