src/HOL/Types_To_Sets/Examples/Linear_Algebra_On.thy
author immler
Thu, 28 Jun 2018 13:49:02 +0200
changeset 68526 f1f989b656bb
parent 68525 e980a0441b61
child 68620 707437105595
permissions -rw-r--r--
transfer more lemmas
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     1
(*  Title:      HOL/Types_To_Sets/Examples/Linear_Algebra_On.thy
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     2
    Author:     Fabian Immler, TU München
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     3
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     4
theory Linear_Algebra_On
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     5
  imports
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     6
    "../Types_To_Sets"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     7
    "Prerequisites"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     8
    Linear_Algebra_On_With
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
     9
  keywords "lemmas_with"::thy_decl
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    10
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    11
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    12
subsection \<open>Rewrite rules to make \<open>ab_group_add\<close> operations implicit.\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    13
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    14
named_theorems implicit_ab_group_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    15
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    16
lemmas [implicit_ab_group_add] = sum_with[symmetric]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    17
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    18
lemma semigroup_add_on_with_eq[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    19
  "semigroup_add_on_with S ((+)::_::semigroup_add \<Rightarrow> _) \<longleftrightarrow> (\<forall>a\<in>S. \<forall>b\<in>S. a + b \<in> S)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    20
  by (simp add: semigroup_add_on_with_def ac_simps)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    21
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    22
lemma ab_semigroup_add_on_with_eq[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    23
  "ab_semigroup_add_on_with S ((+)::_::ab_semigroup_add \<Rightarrow> _) = semigroup_add_on_with S (+)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    24
  unfolding ab_semigroup_add_on_with_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    25
  by (simp add: semigroup_add_on_with_eq ac_simps)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    26
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    27
lemma comm_monoid_add_on_with_eq[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    28
  "comm_monoid_add_on_with S ((+)::_::comm_monoid_add \<Rightarrow> _) 0 \<longleftrightarrow> semigroup_add_on_with S (+) \<and> 0 \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    29
  unfolding comm_monoid_add_on_with_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    30
  by (simp add: ab_semigroup_add_on_with_eq ac_simps)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    31
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    32
lemma ab_group_add_on_with[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    33
  "ab_group_add_on_with S ((+)::_::ab_group_add \<Rightarrow> _) 0 (-) uminus \<longleftrightarrow> comm_monoid_add_on_with S (+) 0"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    34
  unfolding ab_group_add_on_with_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    35
  by simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    36
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    37
subsection \<open>Definitions \<^emph>\<open>on\<close> carrier set\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    38
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    39
locale module_on =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    40
  fixes S and scale :: "'a::comm_ring_1 \<Rightarrow> 'b::ab_group_add \<Rightarrow> 'b" (infixr "*s" 75)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    41
  assumes scale_right_distrib_on [algebra_simps]: "x \<in> S \<Longrightarrow> y \<in> S \<Longrightarrow> a *s (x + y) = a *s x + a *s y"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    42
    and scale_left_distrib_on [algebra_simps]: "x \<in> S \<Longrightarrow> (a + b) *s x = a *s x + b *s x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    43
    and scale_scale_on [simp]: "x \<in> S \<Longrightarrow> a *s (b *s x) = (a * b) *s x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    44
    and scale_one_on [simp]: "x \<in> S \<Longrightarrow> 1 *s x = x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    45
    and mem_add: "x \<in> S \<Longrightarrow> y \<in> S \<Longrightarrow> x + y \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    46
    and mem_zero: "0 \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    47
    and mem_scale: "x \<in> S \<Longrightarrow> a *s x \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    48
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    49
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    50
lemma S_ne: "S \<noteq> {}" using mem_zero by auto
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    51
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    52
lemma scale_minus_left_on: "scale (- a) x = - scale a x" if "x \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    53
  by (metis add_cancel_right_right scale_left_distrib_on neg_eq_iff_add_eq_0 that)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    54
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    55
definition subspace :: "'b set \<Rightarrow> bool"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    56
  where subspace_on_def: "subspace T \<longleftrightarrow> 0 \<in> T \<and> (\<forall>x\<in>T. \<forall>y\<in>T. x + y \<in> T) \<and> (\<forall>c. \<forall>x\<in>T. c *s x \<in> T)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    57
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    58
definition span :: "'b set \<Rightarrow> 'b set"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    59
  where span_on_def: "span b = {sum (\<lambda>a. r a *s  a) t | t r. finite t \<and> t \<subseteq> b}"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    60
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    61
definition dependent :: "'b set \<Rightarrow> bool"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    62
  where dependent_on_def: "dependent s \<longleftrightarrow> (\<exists>t u. finite t \<and> t \<subseteq> s \<and> (sum (\<lambda>v. u v *s v) t = 0 \<and> (\<exists>v\<in>t. u v \<noteq> 0)))"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    63
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    64
lemma implicit_subspace_with[implicit_ab_group_add]: "subspace_with (+) 0 ( *s) = subspace"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    65
  unfolding subspace_on_def subspace_with_def ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    66
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    67
lemma implicit_dependent_with[implicit_ab_group_add]: "dependent_with (+) 0 ( *s) = dependent"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    68
  unfolding dependent_on_def dependent_with_def sum_with ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    69
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    70
lemma implicit_span_with[implicit_ab_group_add]: "span_with (+) 0 ( *s) = span"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    71
  unfolding span_on_def span_with_def sum_with ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    72
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    73
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    74
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    75
lemma implicit_module_on_with[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    76
  "module_on_with S (+) (-) uminus 0 = module_on S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    77
  unfolding module_on_with_def module_on_def implicit_ab_group_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    78
  by auto
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    79
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    80
locale module_pair_on = m1: module_on S1 scale1 +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    81
                        m2: module_on S2 scale2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    82
                        for S1:: "'b::ab_group_add set" and S2::"'c::ab_group_add set"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    83
                          and scale1::"'a::comm_ring_1 \<Rightarrow> _" and scale2::"'a \<Rightarrow> _"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    84
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    85
lemma implicit_module_pair_on_with[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    86
  "module_pair_on_with S1 S2 (+) (-) uminus 0 s1 (+) (-) uminus 0 s2 = module_pair_on S1 S2 s1 s2"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    87
  unfolding module_pair_on_with_def implicit_module_on_with module_pair_on_def ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    88
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    89
locale module_hom_on = m1: module_on S1 s1 + m2: module_on S2 s2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    90
  for S1 :: "'b::ab_group_add set" and S2 :: "'c::ab_group_add set"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    91
    and s1 :: "'a::comm_ring_1 \<Rightarrow> 'b \<Rightarrow> 'b" (infixr "*a" 75)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    92
    and s2 :: "'a::comm_ring_1 \<Rightarrow> 'c \<Rightarrow> 'c" (infixr "*b" 75) +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    93
  fixes f :: "'b \<Rightarrow> 'c"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    94
  assumes add: "\<And>b1 b2. b1 \<in> S1 \<Longrightarrow> b2 \<in> S1 \<Longrightarrow> f (b1 + b2) = f b1 + f b2"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    95
    and scale: "\<And>b. b \<in> S1 \<Longrightarrow> f (r *a b) = r *b f b"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    96
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    97
lemma implicit_module_hom_on_with[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    98
  "module_hom_on_with S1 S2 (+) (-) uminus 0 s1 (+) (-) uminus 0 s2 = module_hom_on S1 S2 s1 s2"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
    99
  unfolding module_hom_on_with_def implicit_module_pair_on_with module_hom_on_def module_pair_on_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   100
    module_hom_on_axioms_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   101
  by (auto intro!: ext)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   102
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   103
locale vector_space_on = module_on S scale
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   104
  for S and scale :: "'a::field \<Rightarrow> 'b::ab_group_add \<Rightarrow> 'b" (infixr "*s" 75)
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   105
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   106
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   107
definition dim :: "'b set \<Rightarrow> nat"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   108
  where "dim V = (if \<exists>b\<subseteq>S. \<not> dependent b \<and> span b = span V
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   109
    then card (SOME b. b \<subseteq> S \<and> \<not> dependent b \<and> span b = span V)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   110
    else 0)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   111
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   112
lemma implicit_dim_with[implicit_ab_group_add]: "dim_on_with S (+) 0 ( *s) = dim"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   113
  unfolding dim_on_with_def dim_def implicit_ab_group_add ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   114
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   115
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   116
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   117
lemma vector_space_on_alt_def: "vector_space_on S = module_on S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   118
  unfolding vector_space_on_def module_on_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   119
  by auto
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   120
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   121
lemma implicit_vector_space_on_with[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   122
  "vector_space_on_with S (+) (-) uminus 0 = vector_space_on S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   123
  unfolding vector_space_on_alt_def vector_space_on_def vector_space_on_with_def implicit_module_on_with ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   124
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   125
locale linear_on = module_hom_on S1 S2 s1 s2 f
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   126
  for S1 S2 and s1::"'a::field \<Rightarrow> 'b \<Rightarrow> 'b::ab_group_add"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   127
    and s2::"'a::field \<Rightarrow> 'c \<Rightarrow> 'c::ab_group_add"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   128
    and f
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   129
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   130
lemma implicit_linear_on_with[implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   131
  "linear_on_with S1 S2 (+) (-) uminus 0 s1 (+) (-) uminus 0 s2 = linear_on S1 S2 s1 s2"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   132
  unfolding linear_on_with_def linear_on_def implicit_module_hom_on_with ..
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   133
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   134
locale finite_dimensional_vector_space_on = vector_space_on S scale for S scale +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   135
  fixes basis :: "'a set"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   136
  assumes finite_Basis: "finite basis"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   137
  and independent_Basis: "\<not> dependent basis"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   138
  and span_Basis: "span basis = S" and basis_subset: "basis \<subseteq> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   139
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   140
locale vector_space_pair_on = m1: vector_space_on S1 scale1 +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   141
  m2: vector_space_on S2 scale2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   142
  for S1:: "'b::ab_group_add set" and S2::"'c::ab_group_add set"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   143
    and scale1::"'a::field \<Rightarrow> _" and scale2::"'a \<Rightarrow> _"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   144
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   145
locale finite_dimensional_vector_space_pair_on =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   146
  vs1: finite_dimensional_vector_space_on S1 scale1 Basis1 +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   147
  vs2: finite_dimensional_vector_space_on S2 scale2 Basis2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   148
  for S1 S2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   149
    and scale1::"'a::field \<Rightarrow> 'b::ab_group_add \<Rightarrow> 'b"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   150
    and scale2::"'a::field \<Rightarrow> 'c::ab_group_add \<Rightarrow> 'c"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   151
    and Basis1 Basis2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   152
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   153
subsection \<open>Tool support\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   154
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   155
lemmas subset_iff' = subset_iff[folded Ball_def]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   156
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   157
ML \<open>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   158
structure More_Simplifier =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   159
struct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   160
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   161
fun asm_full_var_simplify ctxt thm =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   162
  let
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   163
    val ((_, [thm']), ctxt') = Variable.import false [thm] ctxt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   164
  in
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   165
    Simplifier.asm_full_simplify ctxt' thm'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   166
    |> singleton (Variable.export ctxt' ctxt)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   167
    |> Drule.zero_var_indexes
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   168
  end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   169
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   170
fun var_simplify_only ctxt ths thm =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   171
  asm_full_var_simplify (Raw_Simplifier.clear_simpset ctxt addsimps ths) thm
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   172
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   173
val var_simplified = Attrib.thms >>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   174
  (fn ths => Thm.rule_attribute ths
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   175
    (fn context => var_simplify_only (Context.proof_of context) ths))
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   176
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   177
val _ = Theory.setup (Attrib.setup \<^binding>\<open>var_simplified\<close> var_simplified "simplified rule (with vars)")
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   178
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   179
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   180
\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   181
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   182
ML \<open>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   183
val _ = Outer_Syntax.local_theory' \<^command_keyword>\<open>lemmas_with\<close> "note theorems with (the same) attributes"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   184
    (Parse.attribs --| @{keyword :} -- Parse_Spec.name_facts -- Parse.for_fixes
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   185
     >> (fn (((attrs),facts), fixes) =>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   186
      #2 oo Specification.theorems_cmd Thm.theoremK
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   187
        (map (apsnd (map (apsnd (fn xs => attrs@xs)))) facts) fixes))
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   188
\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   189
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   190
subsection \<open>Local Typedef for Subspace\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   191
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   192
lemmas [transfer_rule] = right_total_fun_eq_transfer
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   193
  and [transfer_rule del] = vimage_parametric
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   194
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   195
locale local_typedef = fixes S ::"'b set" and s::"'s itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   196
  assumes Ex_type_definition_S: "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   197
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   198
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   199
definition "rep = fst (SOME (Rep::'s \<Rightarrow> 'b, Abs). type_definition Rep Abs S)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   200
definition "Abs = snd (SOME (Rep::'s \<Rightarrow> 'b, Abs). type_definition Rep Abs S)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   201
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   202
lemma type_definition_S: "type_definition rep Abs S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   203
  unfolding Abs_def rep_def split_beta'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   204
  by (rule someI_ex) (use Ex_type_definition_S in auto)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   205
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   206
lemma rep_in_S[simp]: "rep x \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   207
  and rep_inverse[simp]: "Abs (rep x) = x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   208
  and Abs_inverse[simp]: "y \<in> S \<Longrightarrow> rep (Abs y) = y"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   209
  using type_definition_S
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   210
  unfolding type_definition_def by auto
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   211
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   212
definition cr_S where "cr_S \<equiv> \<lambda>s b. s = rep b"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   213
lemmas Domainp_cr_S = type_definition_Domainp[OF type_definition_S cr_S_def, transfer_domain_rule]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   214
lemmas right_total_cr_S = typedef_right_total[OF type_definition_S cr_S_def, transfer_rule]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   215
  and bi_unique_cr_S = typedef_bi_unique[OF type_definition_S cr_S_def, transfer_rule]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   216
  and left_unique_cr_S = typedef_left_unique[OF type_definition_S cr_S_def, transfer_rule]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   217
  and right_unique_cr_S = typedef_right_unique[OF type_definition_S cr_S_def, transfer_rule]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   218
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   219
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   220
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   221
locale local_typedef_ab_group_add = local_typedef S s for S ::"'b::ab_group_add set" and s::"'s itself" +
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   222
  assumes mem_zero_lt: "0 \<in> S"
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   223
  assumes mem_add_lt: "x \<in> S \<Longrightarrow> y \<in> S \<Longrightarrow> x + y \<in> S"
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   224
  assumes mem_uminus_lt: "x \<in> S \<Longrightarrow> -x \<in> S"
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   225
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   226
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   227
lemma mem_minus_lt: "x \<in> S \<Longrightarrow> y \<in> S \<Longrightarrow> x - y \<in> S"
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   228
  using mem_add_lt[OF _ mem_uminus_lt] by auto
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   229
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   230
context includes lifting_syntax begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   231
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   232
definition plus_S::"'s \<Rightarrow> 's \<Rightarrow> 's" where "plus_S = (rep ---> rep ---> Abs) plus"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   233
definition minus_S::"'s \<Rightarrow> 's \<Rightarrow> 's" where "minus_S = (rep ---> rep ---> Abs) minus"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   234
definition uminus_S::"'s \<Rightarrow> 's" where "uminus_S = (rep ---> Abs) uminus"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   235
definition zero_S::"'s" where "zero_S = Abs 0"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   236
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   237
lemma plus_S_transfer[transfer_rule]: "(cr_S ===> cr_S ===> cr_S) plus plus_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   238
  unfolding plus_S_def
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   239
  by (auto simp: cr_S_def mem_add_lt intro!: rel_funI)
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   240
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   241
lemma minus_S_transfer[transfer_rule]: "(cr_S ===> cr_S ===> cr_S) minus minus_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   242
  unfolding minus_S_def
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   243
  by (auto simp: cr_S_def mem_minus_lt intro!: rel_funI)
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   244
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   245
lemma uminus_S_transfer[transfer_rule]: "(cr_S ===> cr_S) uminus uminus_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   246
  unfolding uminus_S_def
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   247
  by (auto simp: cr_S_def mem_uminus_lt intro!: rel_funI)
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   248
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   249
lemma zero_S_transfer[transfer_rule]: "cr_S 0 zero_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   250
  unfolding zero_S_def
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   251
  by (auto simp: cr_S_def mem_zero_lt intro!: rel_funI)
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   252
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   253
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   254
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   255
sublocale type: ab_group_add plus_S "zero_S::'s" minus_S uminus_S
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   256
  apply unfold_locales
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   257
  subgoal by transfer simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   258
  subgoal by transfer simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   259
  subgoal by transfer simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   260
  subgoal by transfer simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   261
  subgoal by transfer simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   262
  done
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   263
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   264
context includes lifting_syntax begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   265
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   266
lemma sum_transfer[transfer_rule]: "((A===>cr_S) ===> rel_set A ===> cr_S) sum type.sum"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   267
  if [transfer_rule]: "bi_unique A"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   268
proof (safe intro!: rel_funI)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   269
  fix f g S T
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   270
  assume [transfer_rule]: "(A ===> cr_S) f g" and rel_set: "rel_set A S T"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   271
  show "cr_S (sum f S) (type.sum g T)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   272
    using rel_set
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   273
  proof (induction S arbitrary: T rule: infinite_finite_induct)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   274
    case (infinite S)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   275
    note [transfer_rule] = infinite.prems
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   276
    from infinite.hyps have "infinite T" by transfer
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   277
    then show ?case by (simp add: infinite.hyps zero_S_transfer)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   278
  next
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   279
    case [transfer_rule]: empty
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   280
    have "T = {}" by transfer rule
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   281
    then show ?case by (simp add: zero_S_transfer)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   282
  next
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   283
    case (insert x F)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   284
    note [transfer_rule] = insert.prems
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   285
    have [simp]: "finite T"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   286
      by transfer (simp add: insert.hyps)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   287
    obtain y where [transfer_rule]: "A x y" and y: "y \<in> T"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   288
      by (meson insert.prems insertI1 rel_setD1)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   289
    define T' where "T' = T - {y}"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   290
    have T_def: "T = insert y T'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   291
      by (auto simp: T'_def y)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   292
    define sF where "sF = sum f F"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   293
    define sT where "sT = type.sum g T'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   294
    have [simp]: "y \<notin> T'" "finite T'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   295
      by (auto simp: y T'_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   296
    have "rel_set A (insert x F - {x}) T'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   297
      unfolding T'_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   298
      by transfer_prover
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   299
    then have "rel_set A F T'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   300
      using insert.hyps
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   301
      by simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   302
    from insert.IH[OF this] have [transfer_rule]: "cr_S sF sT" by (auto simp: sF_def sT_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   303
    have "cr_S (sum f (insert x F)) (type.sum g (insert y T'))"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   304
      apply (simp add: insert.hyps type.sum.insert_remove sF_def[symmetric] sT_def[symmetric])
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   305
      by transfer_prover
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   306
    then show ?case
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   307
      by (simp add: T_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   308
  qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   309
qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   310
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   311
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   312
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   313
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   314
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   315
locale local_typedef_module_on = module_on S scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   316
  for S and scale::"'a::comm_ring_1\<Rightarrow>'b\<Rightarrow>'b::ab_group_add" and s::"'s itself" +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   317
  assumes Ex_type_definition_S: "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   318
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   319
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   320
lemma mem_sum: "sum f X \<in> S" if "\<And>x. x \<in> X \<Longrightarrow> f x \<in> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   321
  using that
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   322
  by (induction X rule: infinite_finite_induct) (auto intro!: mem_zero mem_add)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   323
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   324
sublocale local_typedef S "TYPE('s)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   325
  using Ex_type_definition_S by unfold_locales
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   326
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   327
sublocale local_typedef_ab_group_add S "TYPE('s)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   328
  using mem_zero mem_add mem_scale[of _ "-1"]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   329
  by unfold_locales (auto simp: scale_minus_left_on)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   330
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   331
context includes lifting_syntax begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   332
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   333
definition scale_S::"'a \<Rightarrow> 's \<Rightarrow> 's" where "scale_S = (id ---> rep ---> Abs) scale"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   334
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   335
lemma scale_S_transfer[transfer_rule]: "((=) ===> cr_S ===> cr_S) scale scale_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   336
  unfolding scale_S_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   337
  by (auto simp: cr_S_def mem_scale intro!: rel_funI)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   338
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   339
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   340
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   341
lemma type_module_on_with: "module_on_with UNIV plus_S minus_S uminus_S (zero_S::'s) scale_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   342
proof -
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   343
  have "module_on_with {x. x \<in> S} (+) (-) uminus 0 scale"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   344
    using module_on_axioms
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   345
    by (auto simp: module_on_with_def module_on_def ab_group_add_on_with_def comm_monoid_add_on_with_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   346
        ab_semigroup_add_on_with_def semigroup_add_on_with_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   347
  then show ?thesis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   348
    by transfer'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   349
qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   350
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   351
lemma UNIV_transfer[transfer_rule]: "(rel_set cr_S) S UNIV"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   352
  by (auto simp: rel_set_def cr_S_def) (metis Abs_inverse)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   353
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   354
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   355
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   356
context includes lifting_syntax begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   357
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   358
lemma Eps_unique_transfer_lemma:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   359
  "f' (Eps (\<lambda>x. Domainp A x \<and> f x)) = g' (Eps g)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   360
  if [transfer_rule]: "right_total A" "(A ===> (=)) f g" "(A ===> (=)) f' g'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   361
    and holds: "\<exists>x. Domainp A x \<and> f x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   362
    and unique_g: "\<And>x y. g x \<Longrightarrow> g y \<Longrightarrow> g' x = g' y"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   363
proof -
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   364
  define Epsg where "Epsg = Eps g"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   365
  have "\<exists>x. g x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   366
    by transfer (simp add: holds)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   367
  then have "g Epsg"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   368
    unfolding Epsg_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   369
    by (rule someI_ex)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   370
  obtain x where x[transfer_rule]: "A x Epsg"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   371
    by (meson \<open>right_total A\<close> right_totalE)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   372
  then have "Domainp A x" by auto
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   373
  from \<open>g Epsg\<close>[untransferred] have "f x" .
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   374
  from unique_g have unique:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   375
    "\<And>x y. Domainp A x \<Longrightarrow> Domainp A y \<Longrightarrow> f x \<Longrightarrow> f y \<Longrightarrow> f' x = f' y"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   376
    by transfer
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   377
  have "f' (Eps (\<lambda>x. Domainp A x \<and> f x)) = f' x"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   378
    apply (rule unique[OF _ \<open>Domainp A x\<close> _ \<open>f x\<close>])
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   379
    apply (metis (mono_tags, lifting) local.holds someI_ex)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   380
    apply (metis (mono_tags, lifting) local.holds someI_ex)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   381
    done
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   382
  show "f' (SOME x. Domainp A x \<and> f x) = g' (Eps g)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   383
    using x \<open>f' (Eps _) = f' x\<close> Epsg_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   384
    using rel_funE that(3) by fastforce
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   385
qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   386
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   387
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   388
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   389
locale local_typedef_vector_space_on = local_typedef_module_on S scale s + vector_space_on S scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   390
  for S and scale::"'a::field\<Rightarrow>'b\<Rightarrow>'b::ab_group_add" and s::"'s itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   391
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   392
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   393
lemma type_vector_space_on_with: "vector_space_on_with UNIV plus_S minus_S uminus_S (zero_S::'s) scale_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   394
  using type_module_on_with
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   395
  by (auto simp: vector_space_on_with_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   396
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   397
context includes lifting_syntax begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   398
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   399
definition dim_S::"'s set \<Rightarrow> nat" where "dim_S = dim_on_with UNIV plus_S zero_S scale_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   400
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   401
lemma transfer_dim[transfer_rule]: "(rel_set cr_S ===> (=)) dim dim_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   402
proof (rule rel_funI)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   403
  fix V V'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   404
  assume [transfer_rule]: "rel_set cr_S V V'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   405
  then have subset: "V \<subseteq> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   406
    by (auto simp: rel_set_def cr_S_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   407
  then have "span V \<subseteq> S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   408
    by (auto simp: span_on_def intro!: mem_sum mem_scale)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   409
  note type_dim_eq_card =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   410
    vector_space.dim_eq_card[var_simplified explicit_ab_group_add, unoverload_type 'd,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   411
      OF type.ab_group_add_axioms type_vector_space_on_with]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   412
  have *: "(\<exists>b\<subseteq>UNIV. \<not> dependent_with plus_S zero_S scale_S b \<and> span_with plus_S zero_S scale_S b = span_with plus_S zero_S scale_S V') \<longleftrightarrow>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   413
    (\<exists>b\<subseteq>S. \<not> local.dependent b \<and> local.span b = local.span V)"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   414
    unfolding subset_iff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   415
    by transfer (simp add: implicit_ab_group_add Ball_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   416
  have **[symmetric]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   417
    "card (SOME b. Domainp (rel_set cr_S) b \<and> (\<not> dependent_with (+) 0 scale b \<and> span_with (+) 0 scale b = span_with (+) 0 scale V)) =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   418
      card (SOME b. \<not> dependent_with plus_S zero_S scale_S b \<and> span_with plus_S zero_S scale_S b = span_with plus_S zero_S scale_S V')"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   419
    if "b \<subseteq> S" "\<not>dependent b" "span b = span V" for b
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   420
    apply (rule Eps_unique_transfer_lemma[where f'=card and g'=card])
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   421
    subgoal by (rule right_total_rel_set) (rule transfer_raw)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   422
    subgoal by transfer_prover
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   423
    subgoal by transfer_prover
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   424
    subgoal using that by (auto simp: implicit_ab_group_add Domainp_set Domainp_cr_S)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   425
    subgoal premises prems for b c
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   426
    proof -
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   427
      from type_dim_eq_card[of b V'] type_dim_eq_card[of c V'] prems
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   428
      show ?thesis by simp
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   429
    qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   430
    done
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   431
  show "local.dim V = dim_S V'"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   432
    unfolding dim_def dim_S_def * dim_on_with_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   433
    by (auto simp: ** Domainp_set Domainp_cr_S implicit_ab_group_add subset_eq)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   434
qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   435
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   436
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   437
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   438
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   439
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   440
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   441
locale local_typedef_finite_dimensional_vector_space_on = local_typedef_vector_space_on S scale s +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   442
  finite_dimensional_vector_space_on S scale Basis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   443
  for S and scale::"'a::field\<Rightarrow>'b\<Rightarrow>'b::ab_group_add" and Basis and s::"'s itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   444
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   445
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   446
definition "Basis_S = Abs ` Basis"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   447
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   448
lemma Basis_S_transfer[transfer_rule]: "rel_set cr_S Basis Basis_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   449
  using Abs_inverse rep_inverse basis_subset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   450
  by (force simp: rel_set_def Basis_S_def cr_S_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   451
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   452
lemma type_finite_dimensional_vector_space_on_with:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   453
  "finite_dimensional_vector_space_on_with UNIV plus_S minus_S uminus_S zero_S scale_S Basis_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   454
proof -
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   455
  have "finite Basis_S" by transfer (rule finite_Basis)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   456
  moreover have "\<not> dependent_with plus_S zero_S scale_S Basis_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   457
    by transfer (simp add: implicit_dependent_with independent_Basis)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   458
  moreover have "span_with plus_S zero_S scale_S Basis_S = UNIV"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   459
    by transfer (simp add: implicit_span_with span_Basis)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   460
  ultimately show ?thesis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   461
    using type_vector_space_on_with
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   462
    by (auto simp: finite_dimensional_vector_space_on_with_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   463
qed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   464
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   465
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   466
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   467
locale local_typedef_module_pair =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   468
  lt1: local_typedef_module_on S1 scale1 s +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   469
  lt2: local_typedef_module_on S2 scale2 t
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   470
  for S1::"'b::ab_group_add set" and scale1::"'a::comm_ring_1 \<Rightarrow> 'b \<Rightarrow> 'b" and s::"'s itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   471
    and S2::"'c::ab_group_add set" and scale2::"'a \<Rightarrow> 'c \<Rightarrow> 'c" and t::"'t itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   472
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   473
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   474
lemma type_module_pair_on_with:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   475
  "module_pair_on_with UNIV UNIV lt1.plus_S lt1.minus_S lt1.uminus_S (lt1.zero_S::'s) lt1.scale_S
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   476
  lt2.plus_S lt2.minus_S lt2.uminus_S (lt2.zero_S::'t) lt2.scale_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   477
  by (simp add: lt1.type_module_on_with lt2.type_module_on_with module_pair_on_with_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   478
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   479
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   480
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   481
locale local_typedef_vector_space_pair =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   482
  local_typedef_module_pair S1 scale1 s S2 scale2 t
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   483
  for S1::"'b::ab_group_add set" and scale1::"'a::field \<Rightarrow> 'b \<Rightarrow> 'b" and s::"'s itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   484
    and S2::"'c::ab_group_add set" and scale2::"'a \<Rightarrow> 'c \<Rightarrow> 'c" and t::"'t itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   485
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   486
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   487
lemma type_vector_space_pair_on_with:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   488
  "vector_space_pair_on_with UNIV UNIV lt1.plus_S lt1.minus_S lt1.uminus_S (lt1.zero_S::'s) lt1.scale_S
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   489
  lt2.plus_S lt2.minus_S lt2.uminus_S (lt2.zero_S::'t) lt2.scale_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   490
  by (simp add: type_module_pair_on_with vector_space_pair_on_with_def)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   491
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   492
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   493
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   494
locale local_typedef_finite_dimensional_vector_space_pair =
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   495
  lt1: local_typedef_finite_dimensional_vector_space_on S1 scale1 Basis1 s +
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   496
  lt2: local_typedef_finite_dimensional_vector_space_on S2 scale2 Basis2 t
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   497
  for S1::"'b::ab_group_add set" and scale1::"'a::field \<Rightarrow> 'b \<Rightarrow> 'b" and Basis1 and s::"'s itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   498
    and S2::"'c::ab_group_add set" and scale2::"'a \<Rightarrow> 'c \<Rightarrow> 'c" and Basis2 and t::"'t itself"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   499
begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   500
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   501
lemma type_finite_dimensional_vector_space_pair_on_with:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   502
  "finite_dimensional_vector_space_pair_on_with UNIV UNIV lt1.plus_S lt1.minus_S lt1.uminus_S (lt1.zero_S::'s) lt1.scale_S lt1.Basis_S
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   503
  lt2.plus_S lt2.minus_S lt2.uminus_S (lt2.zero_S::'t) lt2.scale_S lt2.Basis_S"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   504
  by (simp add: finite_dimensional_vector_space_pair_on_with_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   505
      lt1.type_finite_dimensional_vector_space_on_with
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   506
      lt2.type_finite_dimensional_vector_space_on_with)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   507
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   508
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   509
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   510
subsection \<open>Transfer from type-based @{theory HOL.Modules} and @{theory HOL.Vector_Spaces}\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   511
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   512
context module_on begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   513
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   514
context includes lifting_syntax assumes ltd: "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S" begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   515
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   516
interpretation local_typedef_module_on S scale "TYPE('s)" by unfold_locales fact
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   517
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   518
text\<open>Get theorem names:\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   519
print_locale! module
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   520
text\<open>Then replace:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   521
notes[^"]*"([^"]*).*
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   522
with $1 = module.$1
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   523
\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   524
text \<open>TODO: automate systematic naming!\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   525
lemmas_with [var_simplified explicit_ab_group_add,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   526
    unoverload_type 'd,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   527
    OF type.ab_group_add_axioms type_module_on_with,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   528
    untransferred,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   529
    var_simplified implicit_ab_group_add]:
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   530
    lt_scale_left_commute = module.scale_left_commute
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   531
  and lt_scale_zero_left = module.scale_zero_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   532
  and lt_scale_minus_left = module.scale_minus_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   533
  and lt_scale_left_diff_distrib = module.scale_left_diff_distrib
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   534
  and lt_scale_sum_left = module.scale_sum_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   535
  and lt_scale_zero_right = module.scale_zero_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   536
  and lt_scale_minus_right = module.scale_minus_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   537
  and lt_scale_right_diff_distrib = module.scale_right_diff_distrib
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   538
  and lt_scale_sum_right = module.scale_sum_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   539
  and lt_sum_constant_scale = module.sum_constant_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   540
  and lt_subspace_def = module.subspace_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   541
  and lt_subspaceI = module.subspaceI
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   542
  and lt_subspace_single_0 = module.subspace_single_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   543
  and lt_subspace_0 = module.subspace_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   544
  and lt_subspace_add = module.subspace_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   545
  and lt_subspace_scale = module.subspace_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   546
  and lt_subspace_neg = module.subspace_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   547
  and lt_subspace_diff = module.subspace_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   548
  and lt_subspace_sum = module.subspace_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   549
  and lt_subspace_inter = module.subspace_inter
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   550
  and lt_span_explicit = module.span_explicit
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   551
  and lt_span_explicit' = module.span_explicit'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   552
  and lt_span_finite = module.span_finite
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   553
  and lt_span_induct_alt = module.span_induct_alt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   554
  and lt_span_mono = module.span_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   555
  and lt_span_base = module.span_base
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   556
  and lt_span_superset = module.span_superset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   557
  and lt_span_zero = module.span_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   558
  and lt_span_add = module.span_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   559
  and lt_span_scale = module.span_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   560
  and lt_subspace_span = module.subspace_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   561
  and lt_span_neg = module.span_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   562
  and lt_span_diff = module.span_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   563
  and lt_span_sum = module.span_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   564
  and lt_span_minimal = module.span_minimal
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   565
  and lt_span_unique = module.span_unique
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   566
  and lt_span_subspace_induct = module.span_subspace_induct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   567
  and lt_span_induct = module.span_induct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   568
  and lt_span_empty = module.span_empty
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   569
  and lt_span_subspace = module.span_subspace
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   570
  and lt_span_span = module.span_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   571
  and lt_span_add_eq = module.span_add_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   572
  and lt_span_add_eq2 = module.span_add_eq2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   573
  and lt_span_singleton = module.span_singleton
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   574
  and lt_span_Un = module.span_Un
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   575
  and lt_span_insert = module.span_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   576
  and lt_span_breakdown = module.span_breakdown
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   577
  and lt_span_breakdown_eq = module.span_breakdown_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   578
  and lt_span_clauses = module.span_clauses
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   579
  and lt_span_eq_iff = module.span_eq_iff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   580
  and lt_span_eq = module.span_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   581
  and lt_eq_span_insert_eq = module.eq_span_insert_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   582
  and lt_dependent_explicit = module.dependent_explicit
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   583
  and lt_dependent_mono = module.dependent_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   584
  and lt_independent_mono = module.independent_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   585
  and lt_dependent_zero = module.dependent_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   586
  and lt_independent_empty = module.independent_empty
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   587
  and lt_independent_explicit_module = module.independent_explicit_module
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   588
  and lt_independentD = module.independentD
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   589
  and lt_independent_Union_directed = module.independent_Union_directed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   590
  and lt_dependent_finite = module.dependent_finite
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   591
  and lt_independentD_alt = module.independentD_alt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   592
  and lt_independentD_unique = module.independentD_unique
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   593
  and lt_spanning_subset_independent = module.spanning_subset_independent
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   594
  and lt_module_hom_scale_self = module.module_hom_scale_self
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   595
  and lt_module_hom_scale_left = module.module_hom_scale_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   596
  and lt_module_hom_id = module.module_hom_id
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   597
  and lt_module_hom_ident = module.module_hom_ident
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   598
  and lt_module_hom_uminus = module.module_hom_uminus
68525
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   599
  and lt_subspace_UNIV = module.subspace_UNIV
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   600
(* should work but don't:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   601
  and span_def = module.span_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   602
  and span_UNIV = module.span_UNIV
68525
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   603
  and lt_span_alt = module.span_alt
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   604
  and dependent_alt = module.dependent_alt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   605
  and independent_alt = module.independent_alt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   606
  and unique_representation = module.unique_representation
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   607
  and subspace_Int = module.subspace_Int
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   608
  and subspace_Inter = module.subspace_Inter
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   609
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   610
(* not expected to work:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   611
and representation_ne_zero = module.representation_ne_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   612
and representation_ne_zero = module.representation_ne_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   613
and finite_representation = module.finite_representation
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   614
and sum_nonzero_representation_eq = module.sum_nonzero_representation_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   615
and sum_representation_eq = module.sum_representation_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   616
and representation_eqI = module.representation_eqI
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   617
and representation_basis = module.representation_basis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   618
and representation_zero = module.representation_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   619
and representation_diff = module.representation_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   620
and representation_neg = module.representation_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   621
and representation_add = module.representation_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   622
and representation_sum = module.representation_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   623
and representation_scale = module.representation_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   624
and representation_extend = module.representation_extend
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   625
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   626
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   627
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   628
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   629
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   630
lemmas_with [cancel_type_definition,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   631
    OF S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   632
    folded subset_iff',
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   633
    simplified pred_fun_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   634
    simplified\<comment>\<open>too much?\<close>]:
68524
f5ca4c2157a5 avoid duplicate facts, the "trick" was copied without deeper motivation
immler
parents: 68522
diff changeset
   635
      scale_left_commute = lt_scale_left_commute
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   636
  and scale_zero_left = lt_scale_zero_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   637
  and scale_minus_left = lt_scale_minus_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   638
  and scale_left_diff_distrib = lt_scale_left_diff_distrib
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   639
  and scale_sum_left = lt_scale_sum_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   640
  and scale_zero_right = lt_scale_zero_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   641
  and scale_minus_right = lt_scale_minus_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   642
  and scale_right_diff_distrib = lt_scale_right_diff_distrib
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   643
  and scale_sum_right = lt_scale_sum_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   644
  and sum_constant_scale = lt_sum_constant_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   645
  and subspace_def = lt_subspace_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   646
  and subspaceI = lt_subspaceI
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   647
  and subspace_single_0 = lt_subspace_single_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   648
  and subspace_0 = lt_subspace_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   649
  and subspace_add = lt_subspace_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   650
  and subspace_scale = lt_subspace_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   651
  and subspace_neg = lt_subspace_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   652
  and subspace_diff = lt_subspace_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   653
  and subspace_sum = lt_subspace_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   654
  and subspace_inter = lt_subspace_inter
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   655
  and span_explicit = lt_span_explicit
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   656
  and span_explicit' = lt_span_explicit'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   657
  and span_finite = lt_span_finite
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   658
  and span_induct_alt[consumes 1, case_names base step, induct set : span] = lt_span_induct_alt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   659
  and span_mono = lt_span_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   660
  and span_base = lt_span_base
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   661
  and span_superset = lt_span_superset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   662
  and span_zero = lt_span_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   663
  and span_add = lt_span_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   664
  and span_scale = lt_span_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   665
  and subspace_span = lt_subspace_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   666
  and span_neg = lt_span_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   667
  and span_diff = lt_span_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   668
  and span_sum = lt_span_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   669
  and span_minimal = lt_span_minimal
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   670
  and span_unique = lt_span_unique
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   671
  and span_subspace_induct[consumes 2] = lt_span_subspace_induct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   672
  and span_induct[consumes 1, case_names base step, induct set : span] = lt_span_induct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   673
  and span_empty = lt_span_empty
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   674
  and span_subspace = lt_span_subspace
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   675
  and span_span = lt_span_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   676
  and span_add_eq = lt_span_add_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   677
  and span_add_eq2 = lt_span_add_eq2
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   678
  and span_singleton = lt_span_singleton
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   679
  and span_Un = lt_span_Un
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   680
  and span_insert = lt_span_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   681
  and span_breakdown = lt_span_breakdown
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   682
  and span_breakdown_eq = lt_span_breakdown_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   683
  and span_clauses = lt_span_clauses
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   684
  and span_eq_iff = lt_span_eq_iff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   685
  and span_eq = lt_span_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   686
  and eq_span_insert_eq = lt_eq_span_insert_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   687
  and dependent_explicit = lt_dependent_explicit
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   688
  and dependent_mono = lt_dependent_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   689
  and independent_mono = lt_independent_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   690
  and dependent_zero = lt_dependent_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   691
  and independent_empty = lt_independent_empty
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   692
  and independent_explicit_module = lt_independent_explicit_module
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   693
  and independentD = lt_independentD
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   694
  and independent_Union_directed = lt_independent_Union_directed
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   695
  and dependent_finite = lt_dependent_finite
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   696
  and independentD_alt = lt_independentD_alt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   697
  and independentD_unique = lt_independentD_unique
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   698
  and spanning_subset_independent = lt_spanning_subset_independent
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   699
  and module_hom_scale_self = lt_module_hom_scale_self
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   700
  and module_hom_scale_left = lt_module_hom_scale_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   701
  and module_hom_id = lt_module_hom_id
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   702
  and module_hom_ident = lt_module_hom_ident
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   703
  and module_hom_uminus = lt_module_hom_uminus
68525
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   704
  and subspace_UNIV = lt_subspace_UNIV
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   705
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   706
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   707
subsubsection \<open>Vector Spaces\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   708
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   709
context vector_space_on begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   710
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   711
context includes lifting_syntax assumes "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S" begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   712
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   713
interpretation local_typedef_vector_space_on S scale "TYPE('s)" by unfold_locales fact
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   714
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   715
lemmas_with [var_simplified explicit_ab_group_add,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   716
    unoverload_type 'd,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   717
    OF type.ab_group_add_axioms type_vector_space_on_with,
68526
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   718
    folded dim_S_def,
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   719
    untransferred,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   720
    var_simplified implicit_ab_group_add]:
68525
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   721
    lt_linear_id = vector_space.linear_id
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   722
and lt_linear_ident = vector_space.linear_ident
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   723
and lt_linear_scale_self = vector_space.linear_scale_self
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   724
and lt_linear_scale_left = vector_space.linear_scale_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   725
and lt_linear_uminus = vector_space.linear_uminus
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   726
and lt_linear_imp_scale["consumes" - 1, "case_names" "1"] = vector_space.linear_imp_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   727
and lt_scale_eq_0_iff = vector_space.scale_eq_0_iff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   728
and lt_scale_left_imp_eq = vector_space.scale_left_imp_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   729
and lt_scale_right_imp_eq = vector_space.scale_right_imp_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   730
and lt_scale_cancel_left = vector_space.scale_cancel_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   731
and lt_scale_cancel_right = vector_space.scale_cancel_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   732
and lt_injective_scale = vector_space.injective_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   733
and lt_dependent_def = vector_space.dependent_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   734
and lt_dependent_single = vector_space.dependent_single
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   735
and lt_in_span_insert = vector_space.in_span_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   736
and lt_dependent_insertD = vector_space.dependent_insertD
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   737
and lt_independent_insertI = vector_space.independent_insertI
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   738
and lt_independent_insert = vector_space.independent_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   739
and lt_maximal_independent_subset_extend["consumes" - 1, "case_names" "1"] = vector_space.maximal_independent_subset_extend
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   740
and lt_maximal_independent_subset["consumes" - 1, "case_names" "1"] = vector_space.maximal_independent_subset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   741
and lt_in_span_delete = vector_space.in_span_delete
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   742
and lt_span_redundant = vector_space.span_redundant
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   743
and lt_span_trans = vector_space.span_trans
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   744
and lt_span_insert_0 = vector_space.span_insert_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   745
and lt_span_delete_0 = vector_space.span_delete_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   746
and lt_span_image_scale = vector_space.span_image_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   747
and lt_exchange_lemma = vector_space.exchange_lemma
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   748
and lt_independent_span_bound = vector_space.independent_span_bound
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   749
and lt_independent_explicit_finite_subsets = vector_space.independent_explicit_finite_subsets
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   750
and lt_independent_if_scalars_zero = vector_space.independent_if_scalars_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   751
and lt_subspace_sums = vector_space.subspace_sums
68526
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   752
and lt_dim_unique = vector_space.dim_unique
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   753
and lt_dim_eq_card = vector_space.dim_eq_card
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   754
and lt_basis_card_eq_dim = vector_space.basis_card_eq_dim
68526
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   755
and lt_basis_exists = vector_space.basis_exists
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   756
and lt_dim_eq_card_independent = vector_space.dim_eq_card_independent
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   757
and lt_dim_span = vector_space.dim_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   758
and lt_dim_span_eq_card_independent = vector_space.dim_span_eq_card_independent
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   759
and lt_dim_le_card = vector_space.dim_le_card
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   760
and lt_span_eq_dim = vector_space.span_eq_dim
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   761
and lt_dim_le_card' = vector_space.dim_le_card'
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   762
and lt_span_card_ge_dim = vector_space.span_card_ge_dim
68526
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   763
and lt_dim_with = vector_space.dim_with
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   764
(* should work but don't:
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   765
and lt_bij_if_span_eq_span_bases = vector_space.bij_if_span_eq_span_bases
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   766
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   767
(* not expected to work:
68526
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   768
and lt_dim_def = vector_space.dim_def
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   769
and lt_extend_basis_superset = vector_space.extend_basis_superset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   770
and lt_independent_extend_basis = vector_space.independent_extend_basis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   771
and lt_span_extend_basis = vector_space.span_extend_basis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   772
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   773
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   774
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   775
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   776
lemmas_with [cancel_type_definition,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   777
    OF S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   778
    folded subset_iff',
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   779
    simplified pred_fun_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   780
    simplified\<comment>\<open>too much?\<close>]:
68525
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   781
    linear_id = lt_linear_id
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   782
and linear_ident = lt_linear_ident
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   783
and linear_scale_self = lt_linear_scale_self
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   784
and linear_scale_left = lt_linear_scale_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   785
and linear_uminus = lt_linear_uminus
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   786
and linear_imp_scale["consumes" - 1, "case_names" "1"] = lt_linear_imp_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   787
and scale_eq_0_iff = lt_scale_eq_0_iff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   788
and scale_left_imp_eq = lt_scale_left_imp_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   789
and scale_right_imp_eq = lt_scale_right_imp_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   790
and scale_cancel_left = lt_scale_cancel_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   791
and scale_cancel_right = lt_scale_cancel_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   792
and dependent_def = lt_dependent_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   793
and dependent_single = lt_dependent_single
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   794
and in_span_insert = lt_in_span_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   795
and dependent_insertD = lt_dependent_insertD
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   796
and independent_insertI = lt_independent_insertI
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   797
and independent_insert = lt_independent_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   798
and maximal_independent_subset_extend["consumes" - 1, "case_names" "1"] = lt_maximal_independent_subset_extend
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   799
and maximal_independent_subset["consumes" - 1, "case_names" "1"] = lt_maximal_independent_subset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   800
and in_span_delete = lt_in_span_delete
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   801
and span_redundant = lt_span_redundant
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   802
and span_trans = lt_span_trans
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   803
and span_insert_0 = lt_span_insert_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   804
and span_delete_0 = lt_span_delete_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   805
and span_image_scale = lt_span_image_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   806
and exchange_lemma = lt_exchange_lemma
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   807
and independent_span_bound = lt_independent_span_bound
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   808
and independent_explicit_finite_subsets = lt_independent_explicit_finite_subsets
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   809
and independent_if_scalars_zero = lt_independent_if_scalars_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   810
and subspace_sums = lt_subspace_sums
68526
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   811
and dim_unique = lt_dim_unique
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   812
and dim_eq_card = lt_dim_eq_card
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   813
and basis_card_eq_dim = lt_basis_card_eq_dim
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   814
and basis_exists["consumes" - 1, "case_names" "1"] = lt_basis_exists
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   815
and dim_eq_card_independent = lt_dim_eq_card_independent
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   816
and dim_span = lt_dim_span
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   817
and dim_span_eq_card_independent = lt_dim_span_eq_card_independent
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   818
and dim_le_card = lt_dim_le_card
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   819
and span_eq_dim = lt_span_eq_dim
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   820
and dim_le_card' = lt_dim_le_card'
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   821
and span_card_ge_dim = lt_span_card_ge_dim
f1f989b656bb transfer more lemmas
immler
parents: 68525
diff changeset
   822
and dim_with = lt_dim_with
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   823
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   824
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   825
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   826
subsubsection \<open>Finite Dimensional Vector Spaces\<close>
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   827
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   828
context finite_dimensional_vector_space_on begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   829
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   830
context includes lifting_syntax assumes "\<exists>(Rep::'s \<Rightarrow> 'a) (Abs::'a \<Rightarrow> 's). type_definition Rep Abs S" begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   831
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   832
interpretation local_typedef_finite_dimensional_vector_space_on S scale basis "TYPE('s)" by unfold_locales fact
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   833
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   834
lemmas_with [var_simplified explicit_ab_group_add,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   835
    unoverload_type 'd,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   836
    OF type.ab_group_add_axioms type_finite_dimensional_vector_space_on_with,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   837
    folded dim_S_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   838
    untransferred,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   839
    var_simplified implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   840
     lt_finiteI_independent = finite_dimensional_vector_space.finiteI_independent
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   841
and  lt_dim_empty = finite_dimensional_vector_space.dim_empty
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   842
and  lt_dim_insert = finite_dimensional_vector_space.dim_insert
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   843
and  lt_dim_singleton = finite_dimensional_vector_space.dim_singleton
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   844
and  lt_choose_subspace_of_subspace["consumes" - 1, "case_names" "1"] = finite_dimensional_vector_space.choose_subspace_of_subspace
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   845
and  lt_basis_subspace_exists["consumes" - 1, "case_names" "1"] = finite_dimensional_vector_space.basis_subspace_exists
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   846
and  lt_dim_mono = finite_dimensional_vector_space.dim_mono
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   847
and  lt_dim_subset = finite_dimensional_vector_space.dim_subset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   848
and  lt_dim_eq_0 = finite_dimensional_vector_space.dim_eq_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   849
and  lt_dim_UNIV = finite_dimensional_vector_space.dim_UNIV
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   850
and  lt_independent_card_le_dim = finite_dimensional_vector_space.independent_card_le_dim
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   851
and  lt_card_ge_dim_independent = finite_dimensional_vector_space.card_ge_dim_independent
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   852
and  lt_card_le_dim_spanning = finite_dimensional_vector_space.card_le_dim_spanning
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   853
and  lt_card_eq_dim = finite_dimensional_vector_space.card_eq_dim
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   854
and  lt_subspace_dim_equal = finite_dimensional_vector_space.subspace_dim_equal
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   855
and  lt_dim_eq_span = finite_dimensional_vector_space.dim_eq_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   856
and  lt_dim_psubset = finite_dimensional_vector_space.dim_psubset
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   857
and  lt_indep_card_eq_dim_span = finite_dimensional_vector_space.indep_card_eq_dim_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   858
and  lt_independent_bound_general = finite_dimensional_vector_space.independent_bound_general
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   859
and  lt_independent_explicit = finite_dimensional_vector_space.independent_explicit
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   860
and  lt_dim_sums_Int = finite_dimensional_vector_space.dim_sums_Int
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   861
and  lt_dependent_biggerset_general = finite_dimensional_vector_space.dependent_biggerset_general
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   862
and  lt_subset_le_dim = finite_dimensional_vector_space.subset_le_dim
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   863
and  lt_linear_inj_imp_surj = finite_dimensional_vector_space.linear_inj_imp_surj
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   864
and  lt_linear_surj_imp_inj = finite_dimensional_vector_space.linear_surj_imp_inj
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   865
and  lt_linear_inverse_left = finite_dimensional_vector_space.linear_inverse_left
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   866
and  lt_left_inverse_linear = finite_dimensional_vector_space.left_inverse_linear
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   867
and  lt_right_inverse_linear = finite_dimensional_vector_space.right_inverse_linear
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   868
(* not expected to work:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   869
     lt_dimension_def = finite_dimensional_vector_space.dimension_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   870
and  lt_dim_subset_UNIV = finite_dimensional_vector_space.dim_subset_UNIV
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   871
and  lt_dim_eq_full = finite_dimensional_vector_space.dim_eq_full
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   872
and  lt_inj_linear_imp_inv_linear = finite_dimensional_vector_space.inj_linear_imp_inv_linear
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   873
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   874
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   875
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   876
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   877
lemmas_with [cancel_type_definition,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   878
    OF S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   879
    folded subset_iff',
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   880
    simplified pred_fun_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   881
    simplified\<comment>\<open>too much?\<close>]:
68525
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   882
     finiteI_independent = lt_finiteI_independent
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   883
and  dim_empty = lt_dim_empty
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   884
and  dim_insert = lt_dim_insert
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   885
and  dim_singleton = lt_dim_singleton
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   886
and  choose_subspace_of_subspace["consumes" - 1, "case_names" "1"] = lt_choose_subspace_of_subspace
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   887
and  basis_subspace_exists["consumes" - 1, "case_names" "1"] = lt_basis_subspace_exists
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   888
and  dim_mono = lt_dim_mono
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   889
and  dim_subset = lt_dim_subset
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   890
and  dim_eq_0 = lt_dim_eq_0
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   891
and  dim_UNIV = lt_dim_UNIV
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   892
and  independent_card_le_dim = lt_independent_card_le_dim
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   893
and  card_ge_dim_independent = lt_card_ge_dim_independent
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   894
and  card_le_dim_spanning = lt_card_le_dim_spanning
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   895
and  card_eq_dim = lt_card_eq_dim
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   896
and  subspace_dim_equal = lt_subspace_dim_equal
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   897
and  dim_eq_span = lt_dim_eq_span
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   898
and  dim_psubset = lt_dim_psubset
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   899
and  indep_card_eq_dim_span = lt_indep_card_eq_dim_span
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   900
and  independent_bound_general = lt_independent_bound_general
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   901
and  independent_explicit = lt_independent_explicit
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   902
and  dim_sums_Int = lt_dim_sums_Int
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   903
and  dependent_biggerset_general = lt_dependent_biggerset_general
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   904
and  subset_le_dim = lt_subset_le_dim
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   905
and  linear_inj_imp_surj = lt_linear_inj_imp_surj
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   906
and  linear_surj_imp_inj = lt_linear_surj_imp_inj
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   907
and  linear_inverse_left = lt_linear_inverse_left
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   908
and  left_inverse_linear = lt_left_inverse_linear
e980a0441b61 fixed some oversights
immler
parents: 68524
diff changeset
   909
and  right_inverse_linear = lt_right_inverse_linear
68522
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   910
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   911
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   912
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   913
context module_pair_on begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   914
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   915
context includes lifting_syntax
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   916
  assumes
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   917
    "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S1"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   918
    "\<exists>(Rep::'t \<Rightarrow> 'c) (Abs::'c \<Rightarrow> 't). type_definition Rep Abs S2" begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   919
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   920
interpretation local_typedef_module_pair S1 scale1 "TYPE('s)" S2 scale2 "TYPE('t)" by unfold_locales fact+
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   921
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   922
lemmas_with [var_simplified explicit_ab_group_add,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   923
  unoverload_type 'e 'b,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   924
  OF lt2.type.ab_group_add_axioms lt1.type.ab_group_add_axioms type_module_pair_on_with,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   925
  untransferred,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   926
  var_simplified implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   927
  lt_module_hom_zero = module_pair.module_hom_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   928
and lt_module_hom_add = module_pair.module_hom_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   929
and lt_module_hom_sub = module_pair.module_hom_sub
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   930
and lt_module_hom_neg = module_pair.module_hom_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   931
and lt_module_hom_scale = module_pair.module_hom_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   932
and lt_module_hom_compose_scale = module_pair.module_hom_compose_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   933
and lt_module_hom_sum = module_pair.module_hom_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   934
and lt_module_hom_eq_on_span = module_pair.module_hom_eq_on_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   935
(* should work, but doesnt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   936
and lt_bij_module_hom_imp_inv_module_hom = module_pair.bij_module_hom_imp_inv_module_hom[of scale1 scale2]
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   937
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   938
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   939
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   940
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   941
lemmas_with [cancel_type_definition, OF m1.S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   942
  cancel_type_definition, OF m2.S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   943
    folded subset_iff' top_set_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   944
    simplified pred_fun_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   945
    simplified\<comment>\<open>too much?\<close>]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   946
  module_hom_zero = lt_module_hom_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   947
and module_hom_add = lt_module_hom_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   948
and module_hom_sub = lt_module_hom_sub
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   949
and module_hom_neg = lt_module_hom_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   950
and module_hom_scale = lt_module_hom_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   951
and module_hom_compose_scale = lt_module_hom_compose_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   952
and module_hom_sum = lt_module_hom_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   953
and module_hom_eq_on_span = lt_module_hom_eq_on_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   954
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   955
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   956
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   957
context vector_space_pair_on begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   958
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   959
context includes lifting_syntax
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   960
  notes [transfer_rule del] = Collect_transfer
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   961
  assumes
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   962
    "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S1"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   963
    "\<exists>(Rep::'t \<Rightarrow> 'c) (Abs::'c \<Rightarrow> 't). type_definition Rep Abs S2" begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   964
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   965
interpretation local_typedef_vector_space_pair S1 scale1 "TYPE('s)" S2 scale2 "TYPE('t)" by unfold_locales fact+
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   966
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   967
lemmas_with [var_simplified explicit_ab_group_add,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   968
    unoverload_type 'e 'b,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   969
  OF lt2.type.ab_group_add_axioms lt1.type.ab_group_add_axioms type_vector_space_pair_on_with,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   970
  untransferred,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   971
  var_simplified implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   972
  lt_linear_0 = vector_space_pair.linear_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   973
and lt_linear_add = vector_space_pair.linear_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   974
and lt_linear_scale = vector_space_pair.linear_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   975
and lt_linear_neg = vector_space_pair.linear_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   976
and lt_linear_diff = vector_space_pair.linear_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   977
and lt_linear_sum = vector_space_pair.linear_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   978
and lt_linear_inj_on_iff_eq_0 = vector_space_pair.linear_inj_on_iff_eq_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   979
and lt_linear_inj_iff_eq_0 = vector_space_pair.linear_inj_iff_eq_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   980
and lt_linear_subspace_image = vector_space_pair.linear_subspace_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   981
and lt_linear_subspace_vimage = vector_space_pair.linear_subspace_vimage
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   982
and lt_linear_subspace_kernel = vector_space_pair.linear_subspace_kernel
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   983
and lt_linear_span_image = vector_space_pair.linear_span_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   984
and lt_linear_dependent_inj_imageD = vector_space_pair.linear_dependent_inj_imageD
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   985
and lt_linear_eq_0_on_span = vector_space_pair.linear_eq_0_on_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   986
and lt_linear_independent_injective_image = vector_space_pair.linear_independent_injective_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   987
and lt_linear_inj_on_span_independent_image = vector_space_pair.linear_inj_on_span_independent_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   988
and lt_linear_inj_on_span_iff_independent_image = vector_space_pair.linear_inj_on_span_iff_independent_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   989
and lt_linear_subspace_linear_preimage = vector_space_pair.linear_subspace_linear_preimage
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   990
and lt_linear_spans_image = vector_space_pair.linear_spans_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   991
and lt_linear_spanning_surjective_image = vector_space_pair.linear_spanning_surjective_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   992
and lt_linear_eq_on_span = vector_space_pair.linear_eq_on_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   993
and lt_linear_compose_scale_right = vector_space_pair.linear_compose_scale_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   994
and lt_linear_compose_add = vector_space_pair.linear_compose_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   995
and lt_linear_zero = vector_space_pair.linear_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   996
and lt_linear_compose_sub = vector_space_pair.linear_compose_sub
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   997
and lt_linear_compose_neg = vector_space_pair.linear_compose_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   998
and lt_linear_compose_scale = vector_space_pair.linear_compose_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
   999
and lt_linear_indep_image_lemma = vector_space_pair.linear_indep_image_lemma
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1000
and lt_linear_eq_on = vector_space_pair.linear_eq_on
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1001
and lt_linear_compose_sum = vector_space_pair.linear_compose_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1002
and lt_linear_independent_extend_subspace = vector_space_pair.linear_independent_extend_subspace
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1003
and lt_linear_independent_extend = vector_space_pair.linear_independent_extend
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1004
and lt_linear_exists_left_inverse_on = vector_space_pair.linear_exists_left_inverse_on
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1005
and lt_linear_exists_right_inverse_on = vector_space_pair.linear_exists_right_inverse_on
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1006
and lt_linear_inj_on_left_inverse = vector_space_pair.linear_inj_on_left_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1007
and lt_linear_injective_left_inverse = vector_space_pair.linear_injective_left_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1008
and lt_linear_surj_right_inverse = vector_space_pair.linear_surj_right_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1009
and lt_linear_surjective_right_inverse = vector_space_pair.linear_surjective_right_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1010
(* should work, but doesnt
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1011
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1012
(* not expected to work:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1013
  lt_construct_def = vector_space_pair.construct_def
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1014
  lt_construct_cong = vector_space_pair.construct_cong
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1015
  lt_linear_construct = vector_space_pair.linear_construct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1016
  lt_construct_basis = vector_space_pair.construct_basis
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1017
  lt_construct_outside = vector_space_pair.construct_outside
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1018
  lt_construct_add = vector_space_pair.construct_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1019
  lt_construct_scale = vector_space_pair.construct_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1020
  lt_construct_in_span = vector_space_pair.construct_in_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1021
  lt_in_span_in_range_construct = vector_space_pair.in_span_in_range_construct
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1022
  lt_range_construct_eq_span = vector_space_pair.range_construct_eq_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1023
*)
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1024
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1025
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1026
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1027
lemmas_with [cancel_type_definition, OF m1.S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1028
    cancel_type_definition, OF m2.S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1029
    folded subset_iff' top_set_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1030
    simplified pred_fun_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1031
    simplified\<comment>\<open>too much?\<close>]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1032
  linear_0 = lt_linear_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1033
  and linear_add = lt_linear_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1034
  and linear_scale = lt_linear_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1035
  and linear_neg = lt_linear_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1036
  and linear_diff = lt_linear_diff
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1037
  and linear_sum = lt_linear_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1038
  and linear_inj_on_iff_eq_0 = lt_linear_inj_on_iff_eq_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1039
  and linear_inj_iff_eq_0 = lt_linear_inj_iff_eq_0
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1040
  and linear_subspace_image = lt_linear_subspace_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1041
  and linear_subspace_vimage = lt_linear_subspace_vimage
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1042
  and linear_subspace_kernel = lt_linear_subspace_kernel
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1043
  and linear_span_image = lt_linear_span_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1044
  and linear_dependent_inj_imageD = lt_linear_dependent_inj_imageD
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1045
  and linear_eq_0_on_span = lt_linear_eq_0_on_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1046
  and linear_independent_injective_image = lt_linear_independent_injective_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1047
  and linear_inj_on_span_independent_image = lt_linear_inj_on_span_independent_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1048
  and linear_inj_on_span_iff_independent_image = lt_linear_inj_on_span_iff_independent_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1049
  and linear_subspace_linear_preimage = lt_linear_subspace_linear_preimage
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1050
  and linear_spans_image = lt_linear_spans_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1051
  and linear_spanning_surjective_image = lt_linear_spanning_surjective_image
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1052
  and linear_eq_on_span = lt_linear_eq_on_span
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1053
  and linear_compose_scale_right = lt_linear_compose_scale_right
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1054
  and linear_compose_add = lt_linear_compose_add
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1055
  and linear_zero = lt_linear_zero
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1056
  and linear_compose_sub = lt_linear_compose_sub
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1057
  and linear_compose_neg = lt_linear_compose_neg
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1058
  and linear_compose_scale = lt_linear_compose_scale
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1059
  and linear_indep_image_lemma = lt_linear_indep_image_lemma
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1060
  and linear_eq_on = lt_linear_eq_on
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1061
  and linear_compose_sum = lt_linear_compose_sum
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1062
  and linear_independent_extend_subspace = lt_linear_independent_extend_subspace
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1063
  and linear_independent_extend = lt_linear_independent_extend
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1064
  and linear_exists_left_inverse_on = lt_linear_exists_left_inverse_on
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1065
  and linear_exists_right_inverse_on = lt_linear_exists_right_inverse_on
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1066
  and linear_inj_on_left_inverse = lt_linear_inj_on_left_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1067
  and linear_injective_left_inverse = lt_linear_injective_left_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1068
  and linear_surj_right_inverse = lt_linear_surj_right_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1069
  and linear_surjective_right_inverse = lt_linear_surjective_right_inverse
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1070
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1071
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1072
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1073
context finite_dimensional_vector_space_pair_on begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1074
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1075
context includes lifting_syntax
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1076
  notes [transfer_rule del] = Collect_transfer
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1077
  assumes
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1078
    "\<exists>(Rep::'s \<Rightarrow> 'b) (Abs::'b \<Rightarrow> 's). type_definition Rep Abs S1"
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1079
    "\<exists>(Rep::'t \<Rightarrow> 'c) (Abs::'c \<Rightarrow> 't). type_definition Rep Abs S2" begin
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1080
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1081
interpretation local_typedef_finite_dimensional_vector_space_pair S1 scale1 Basis1 "TYPE('s)" S2 scale2 Basis2 "TYPE('t)" by unfold_locales fact+
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1082
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1083
lemmas_with [var_simplified explicit_ab_group_add,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1084
    unoverload_type 'e 'b,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1085
  OF lt2.type.ab_group_add_axioms lt1.type.ab_group_add_axioms type_finite_dimensional_vector_space_pair_on_with,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1086
  folded lt1.dim_S_def lt2.dim_S_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1087
  untransferred,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1088
  var_simplified implicit_ab_group_add]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1089
lt_linear_surjective_imp_injective = finite_dimensional_vector_space_pair.linear_surjective_imp_injective
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1090
and lt_linear_injective_imp_surjective = finite_dimensional_vector_space_pair.linear_injective_imp_surjective
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1091
and lt_linear_injective_isomorphism = finite_dimensional_vector_space_pair.linear_injective_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1092
and lt_linear_surjective_isomorphism = finite_dimensional_vector_space_pair.linear_surjective_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1093
and lt_dim_image_eq = finite_dimensional_vector_space_pair.dim_image_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1094
and lt_basis_to_basis_subspace_isomorphism = finite_dimensional_vector_space_pair.basis_to_basis_subspace_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1095
and lt_dim_image_le = finite_dimensional_vector_space_pair.dim_image_le
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1096
and lt_subspace_isomorphism = finite_dimensional_vector_space_pair.subspace_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1097
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1098
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1099
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1100
lemmas_with [cancel_type_definition, OF vs1.S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1101
    cancel_type_definition, OF vs2.S_ne,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1102
    folded subset_iff' top_set_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1103
    simplified pred_fun_def,
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1104
    simplified\<comment>\<open>too much?\<close>]:
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1105
linear_surjective_imp_injective = lt_linear_surjective_imp_injective
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1106
and linear_injective_imp_surjective = lt_linear_injective_imp_surjective
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1107
and linear_injective_isomorphism = lt_linear_injective_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1108
and linear_surjective_isomorphism = lt_linear_surjective_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1109
and dim_image_eq = lt_dim_image_eq
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1110
and basis_to_basis_subspace_isomorphism = lt_basis_to_basis_subspace_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1111
and dim_image_le = lt_dim_image_le
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1112
and subspace_isomorphism = lt_subspace_isomorphism
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1113
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1114
end
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1115
d9cbc1e8644d example for Types_To_Sets: transfer from type-based linear algebra to subspaces
immler
parents:
diff changeset
  1116
end