src/HOL/ex/Interpretation_in_nested_targets.thy
author wenzelm
Sun, 04 Aug 2024 17:39:47 +0200
changeset 80636 4041e7c8059d
parent 73846 9447668d1b77
permissions -rw-r--r--
tuned: more explicit dest_Const_name and dest_Const_type;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
73846
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     1
theory Interpretation_in_nested_targets
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     2
  imports Main
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     3
begin
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     4
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     5
locale injection =
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     6
  fixes f :: \<open>'a \<Rightarrow> 'b\<close>
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     7
  assumes eqI: \<open>f x = f y \<Longrightarrow> x = y\<close>
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     8
begin
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
     9
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    10
lemma eq_iff:
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    11
  \<open>x = y \<longleftrightarrow> f x = f y\<close>
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    12
  by (auto intro: eqI)
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    13
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    14
lemma inv_apply:
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    15
  \<open>inv f (f x) = x\<close>
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    16
  by (rule inv_f_f) (simp add: eqI injI)
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    17
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    18
end
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    19
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    20
context
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    21
  fixes f :: \<open>'a::linorder \<Rightarrow> 'b::linorder\<close>
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    22
  assumes \<open>strict_mono f\<close>
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    23
begin
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    24
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    25
global_interpretation strict_mono: injection f
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    26
  by standard (simp add: \<open>strict_mono f\<close> strict_mono_eq)
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    27
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    28
thm strict_mono.eq_iff
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    29
thm strict_mono.inv_apply
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    30
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    31
end
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    32
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    33
thm strict_mono.eq_iff
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    34
thm strict_mono.inv_apply
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    35
9447668d1b77 global interpretation into nested targets
haftmann
parents:
diff changeset
    36
end