src/HOL/Multivariate_Analysis/Brouwer_Fixpoint.thy
author wenzelm
Tue, 03 Sep 2013 01:12:40 +0200
changeset 53374 a14d2a854c02
parent 53252 4766fbe322b5
child 53674 7ac7b2eaa5e6
permissions -rw-r--r--
tuned proofs -- clarified flow of facts wrt. calculation;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     1
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     2
(* ========================================================================= *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     3
(* Results connected with topological dimension.                             *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     4
(*                                                                           *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     5
(* At the moment this is just Brouwer's fixpoint theorem. The proof is from  *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     6
(* Kuhn: "some combinatorial lemmas in topology", IBM J. v4. (1960) p. 518   *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     7
(* See "http://www.research.ibm.com/journal/rd/045/ibmrd0405K.pdf".          *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     8
(*                                                                           *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
     9
(* The script below is quite messy, but at least we avoid formalizing any    *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    10
(* topological machinery; we don't even use barycentric subdivision; this is *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    11
(* the big advantage of Kuhn's proof over the usual Sperner's lemma one.     *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    12
(*                                                                           *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    13
(*              (c) Copyright, John Harrison 1998-2008                       *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    14
(* ========================================================================= *)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    15
33759
b369324fc244 Added the contributions of Robert Himmelmann to CONTRIBUTIONS and NEWS
hoelzl
parents: 33758
diff changeset
    16
(* Author:                     John Harrison
b369324fc244 Added the contributions of Robert Himmelmann to CONTRIBUTIONS and NEWS
hoelzl
parents: 33758
diff changeset
    17
   Translation from HOL light: Robert Himmelmann, TU Muenchen *)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    18
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    19
header {* Results connected with topological dimension. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    20
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    21
theory Brouwer_Fixpoint
36432
1ad1cfeaec2d move proof of Fashoda meet theorem into separate file
huffman
parents: 36431
diff changeset
    22
  imports Convex_Euclidean_Space
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    23
begin
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    24
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    25
(** move this **)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    26
lemma divide_nonneg_nonneg:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    27
  assumes "a \<ge> 0" "b \<ge> 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    28
  shows "0 \<le> a / (b::real)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    29
  apply (cases "b=0")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    30
  defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    31
  apply (rule divide_nonneg_pos)
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
    32
  using assms
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
    33
  apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    34
  done
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    35
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    36
lemma brouwer_compactness_lemma:
50884
2b21b4e2d7cb differentiate (cover) compactness and sequential compactness
hoelzl
parents: 50526
diff changeset
    37
  fixes f :: "'a::metric_space \<Rightarrow> 'b::euclidean_space"
2b21b4e2d7cb differentiate (cover) compactness and sequential compactness
hoelzl
parents: 50526
diff changeset
    38
  assumes "compact s" "continuous_on s f" "\<not> (\<exists>x\<in>s. (f x = 0))"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    39
  obtains d where "0 < d" "\<forall>x\<in>s. d \<le> norm(f x)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    40
proof (cases "s = {}")
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    41
  case False
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    42
  have "continuous_on s (norm \<circ> f)"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    43
    by (rule continuous_on_intros continuous_on_norm assms(2))+
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    44
  with False obtain x where x: "x\<in>s" "\<forall>y\<in>s. (norm \<circ> f) x \<le> (norm \<circ> f) y"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    45
    using continuous_attains_inf[OF assms(1), of "norm \<circ> f"] unfolding o_def by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    46
  have "(norm \<circ> f) x > 0" using assms(3) and x(1) by auto
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    47
  then show ?thesis by (rule that) (insert x(2), auto simp: o_def)
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    48
next
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    49
  case True
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    50
  show thesis by (rule that [of 1]) (auto simp: True)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    51
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    52
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    53
lemma kuhn_labelling_lemma:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    54
  fixes P Q :: "'a::euclidean_space \<Rightarrow> bool"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    55
  assumes "(\<forall>x. P x \<longrightarrow> P (f x))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    56
    and "\<forall>x. P x \<longrightarrow> (\<forall>i\<in>Basis. Q i \<longrightarrow> 0 \<le> x\<bullet>i \<and> x\<bullet>i \<le> 1)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    57
  shows "\<exists>l. (\<forall>x.\<forall>i\<in>Basis. l x i \<le> (1::nat)) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    58
             (\<forall>x.\<forall>i\<in>Basis. P x \<and> Q i \<and> (x\<bullet>i = 0) \<longrightarrow> (l x i = 0)) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    59
             (\<forall>x.\<forall>i\<in>Basis. P x \<and> Q i \<and> (x\<bullet>i = 1) \<longrightarrow> (l x i = 1)) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    60
             (\<forall>x.\<forall>i\<in>Basis. P x \<and> Q i \<and> (l x i = 0) \<longrightarrow> x\<bullet>i \<le> f(x)\<bullet>i) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    61
             (\<forall>x.\<forall>i\<in>Basis. P x \<and> Q i \<and> (l x i = 1) \<longrightarrow> f(x)\<bullet>i \<le> x\<bullet>i)"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    62
proof -
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    63
  have and_forall_thm:"\<And>P Q. (\<forall>x. P x) \<and> (\<forall>x. Q x) \<longleftrightarrow> (\<forall>x. P x \<and> Q x)"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    64
    by auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
    65
  have *: "\<forall>x y::real. 0 \<le> x \<and> x \<le> 1 \<and> 0 \<le> y \<and> y \<le> 1 \<longrightarrow> (x \<noteq> 1 \<and> x \<le> y \<or> x \<noteq> 0 \<and> y \<le> x)"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    66
    by auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    67
  show ?thesis
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    68
    unfolding and_forall_thm Ball_def
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    69
    apply (subst choice_iff[symmetric])+
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    70
    apply rule
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    71
    apply rule
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    72
  proof -
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    73
    case (goal1 x)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    74
    let ?R = "\<lambda>y. (P x \<and> Q xa \<and> x \<bullet> xa = 0 \<longrightarrow> y = (0::nat)) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    75
        (P x \<and> Q xa \<and> x \<bullet> xa = 1 \<longrightarrow> y = 1) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    76
        (P x \<and> Q xa \<and> y = 0 \<longrightarrow> x \<bullet> xa \<le> f x \<bullet> xa) \<and>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    77
        (P x \<and> Q xa \<and> y = 1 \<longrightarrow> f x \<bullet> xa \<le> x \<bullet> xa)"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    78
    {
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    79
      assume "P x" "Q xa" "xa\<in>Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    80
      then have "0 \<le> f x \<bullet> xa \<and> f x \<bullet> xa \<le> 1"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    81
        using assms(2)[rule_format,of "f x" xa]
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    82
        apply (drule_tac assms(1)[rule_format])
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    83
        apply auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    84
        done
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    85
    }
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
    86
    then have "xa\<in>Basis \<Longrightarrow> ?R 0 \<or> ?R 1" by auto
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    87
    then show ?case by auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    88
  qed
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    89
qed
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    90
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
    91
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    92
subsection {* The key "counting" observation, somewhat abstracted. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    93
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    94
lemma setsum_Un_disjoint':
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
    95
  assumes "finite A" "finite B" "A \<inter> B = {}" "A \<union> B = C"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    96
  shows "setsum g C = setsum g A + setsum g B"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    97
  using setsum_Un_disjoint[OF assms(1-3)] and assms(4) by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
    98
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
    99
lemma kuhn_counting_lemma:
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   100
  assumes
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   101
    "finite faces"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   102
    "finite simplices"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   103
    "\<forall>f\<in>faces. bnd f \<longrightarrow> (card {s \<in> simplices. face f s} = 1)"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   104
    "\<forall>f\<in>faces. \<not> bnd f \<longrightarrow> (card {s \<in> simplices. face f s} = 2)"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   105
    "\<forall>s\<in>simplices. compo s \<longrightarrow> (card {f \<in> faces. face f s \<and> compo' f} = 1)"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   106
    "\<forall>s\<in>simplices. \<not> compo s \<longrightarrow>
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   107
      (card {f \<in> faces. face f s \<and> compo' f} = 0) \<or> (card {f \<in> faces. face f s \<and> compo' f} = 2)"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   108
    "odd(card {f \<in> faces. compo' f \<and> bnd f})"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   109
  shows "odd(card {s \<in> simplices. compo s})"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   110
proof -
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   111
  have "\<And>x. {f\<in>faces. compo' f \<and> bnd f \<and> face f x} \<union> {f\<in>faces. compo' f \<and> \<not>bnd f \<and> face f x} =
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   112
      {f\<in>faces. compo' f \<and> face f x}"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   113
    "\<And>x. {f \<in> faces. compo' f \<and> bnd f \<and> face f x} \<inter> {f \<in> faces. compo' f \<and> \<not> bnd f \<and> face f x} = {}"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   114
    by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   115
  hence lem1:"setsum (\<lambda>s. (card {f \<in> faces. face f s \<and> compo' f})) simplices =
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   116
      setsum (\<lambda>s. card {f \<in> {f \<in> faces. compo' f \<and> bnd f}. face f s}) simplices +
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   117
      setsum (\<lambda>s. card {f \<in> {f \<in> faces. compo' f \<and> \<not> (bnd f)}. face f s}) simplices"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   118
    unfolding setsum_addf[symmetric]
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   119
    apply -
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   120
    apply(rule setsum_cong2)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   121
    using assms(1)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   122
    apply (auto simp add: card_Un_Int, auto simp add:conj_commute)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   123
    done
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   124
  have lem2:
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   125
    "setsum (\<lambda>j. card {f \<in> {f \<in> faces. compo' f \<and> bnd f}. face f j}) simplices =
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   126
      1 * card {f \<in> faces. compo' f \<and> bnd f}"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   127
    "setsum (\<lambda>j. card {f \<in> {f \<in> faces. compo' f \<and> \<not> bnd f}. face f j}) simplices =
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   128
      2 * card {f \<in> faces. compo' f \<and> \<not> bnd f}"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   129
    apply(rule_tac[!] setsum_multicount)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   130
    using assms
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   131
    apply auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   132
    done
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   133
  have lem3:
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   134
    "setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f}) simplices =
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   135
      setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f}) {s \<in> simplices.   compo s}+
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   136
      setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f}) {s \<in> simplices. \<not> compo s}"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   137
    apply (rule setsum_Un_disjoint')
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   138
    using assms(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   139
    apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   140
    done
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   141
  have lem4: "setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f}) {s \<in> simplices. compo s} =
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   142
    setsum (\<lambda>s. 1) {s \<in> simplices. compo s}"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   143
    apply (rule setsum_cong2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   144
    using assms(5)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   145
    apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   146
    done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   147
  have lem5: "setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f}) {s \<in> simplices. \<not> compo s} =
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   148
    setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f})
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   149
           {s \<in> simplices. (\<not> compo s) \<and> (card {f \<in> faces. face f s \<and> compo' f} = 0)} +
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   150
    setsum (\<lambda>s. card {f \<in> faces. face f s \<and> compo' f})
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   151
           {s \<in> simplices. (\<not> compo s) \<and> (card {f \<in> faces. face f s \<and> compo' f} = 2)}"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   152
    apply (rule setsum_Un_disjoint')
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   153
    using assms(2,6)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   154
    apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   155
    done
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   156
  have *: "int (\<Sum>s\<in>{s \<in> simplices. compo s}. card {f \<in> faces. face f s \<and> compo' f}) =
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   157
    int (card {f \<in> faces. compo' f \<and> bnd f} + 2 * card {f \<in> faces. compo' f \<and> \<not> bnd f}) -
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   158
    int (card {s \<in> simplices. \<not> compo s \<and> card {f \<in> faces. face f s \<and> compo' f} = 2} * 2)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   159
    using lem1[unfolded lem3 lem2 lem5] by auto
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   160
  have even_minus_odd:"\<And>x y. even x \<Longrightarrow> odd (y::int) \<Longrightarrow> odd (x - y)"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   161
    using assms by auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   162
  have odd_minus_even:"\<And>x y. odd x \<Longrightarrow> even (y::int) \<Longrightarrow> odd (x - y)"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   163
    using assms by auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   164
  show ?thesis
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   165
    unfolding even_nat_def card_eq_setsum and lem4[symmetric] and *[unfolded card_eq_setsum]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   166
    unfolding card_eq_setsum[symmetric]
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   167
    apply (rule odd_minus_even)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   168
    unfolding of_nat_add
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   169
    apply(rule odd_plus_even)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   170
    apply(rule assms(7)[unfolded even_nat_def])
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   171
    unfolding int_mult
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   172
    apply auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   173
    done
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   174
qed
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   175
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   176
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   177
subsection {* The odd/even result for faces of complete vertices, generalized. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   178
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   179
lemma card_1_exists: "card s = 1 \<longleftrightarrow> (\<exists>!x. x \<in> s)"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   180
  unfolding One_nat_def
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   181
  apply rule
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   182
  apply (drule card_eq_SucD)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   183
  defer
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   184
  apply (erule ex1E)
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   185
proof -
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   186
  fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   187
  assume as: "x \<in> s" "\<forall>y. y \<in> s \<longrightarrow> y = x"
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   188
  have *: "s = insert x {}"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   189
    apply (rule set_eqI, rule) unfolding singleton_iff
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   190
    apply (rule as(2)[rule_format]) using as(1)
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   191
    apply auto
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   192
    done
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   193
  show "card s = Suc 0"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   194
    unfolding * using card_insert by auto
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   195
qed auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   196
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   197
lemma card_2_exists: "card s = 2 \<longleftrightarrow> (\<exists>x\<in>s. \<exists>y\<in>s. x \<noteq> y \<and> (\<forall>z\<in>s. (z = x) \<or> (z = y)))"
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   198
proof
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   199
  assume "card s = 2"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   200
  then obtain x y where s: "s = {x, y}" "x\<noteq>y" unfolding numeral_2_eq_2
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   201
    apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   202
    apply (erule exE conjE | drule card_eq_SucD)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   203
    apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   204
    done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   205
  show "\<exists>x\<in>s. \<exists>y\<in>s. x \<noteq> y \<and> (\<forall>z\<in>s. z = x \<or> z = y)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   206
    using s by auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   207
next
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   208
  assume "\<exists>x\<in>s. \<exists>y\<in>s. x \<noteq> y \<and> (\<forall>z\<in>s. z = x \<or> z = y)"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   209
  then obtain x y where "x\<in>s" "y\<in>s" "x \<noteq> y" "\<forall>z\<in>s. z = x \<or> z = y"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   210
    by auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   211
  then have "s = {x, y}" by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   212
  with `x \<noteq> y` show "card s = 2" by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   213
qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   214
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   215
lemma image_lemma_0:
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   216
  assumes "card {a\<in>s. f ` (s - {a}) = t - {b}} = n"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   217
  shows "card {s'. \<exists>a\<in>s. (s' = s - {a}) \<and> (f ` s' = t - {b})} = n"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   218
proof -
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   219
  have *: "{s'. \<exists>a\<in>s. (s' = s - {a}) \<and> (f ` s' = t - {b})} =
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   220
    (\<lambda>a. s - {a}) ` {a\<in>s. f ` (s - {a}) = t - {b}}"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   221
    by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   222
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   223
    unfolding *
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   224
    unfolding assms[symmetric]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   225
    apply (rule card_image)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   226
    unfolding inj_on_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   227
    apply (rule, rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   228
    unfolding mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   229
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   230
    done
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   231
qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   232
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   233
lemma image_lemma_1:
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   234
  assumes "finite s" "finite t" "card s = card t" "f ` s = t" "b \<in> t"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   235
  shows "card {s'. \<exists>a\<in>s. s' = s - {a} \<and>  f ` s' = t - {b}} = 1"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   236
proof -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   237
  obtain a where a: "b = f a" "a\<in>s" using assms(4-5) by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   238
  have inj: "inj_on f s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   239
    apply (rule eq_card_imp_inj_on)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   240
    using assms(1-4) apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   241
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   242
  have *: "{a \<in> s. f ` (s - {a}) = t - {b}} = {a}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   243
    apply (rule set_eqI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   244
    unfolding singleton_iff
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   245
    apply (rule, rule inj[unfolded inj_on_def, rule_format])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   246
    unfolding a using a(2) and assms and inj[unfolded inj_on_def]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   247
    apply auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   248
    done
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   249
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   250
    apply (rule image_lemma_0)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   251
    unfolding *
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   252
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   253
    done
49374
b08c6312782b tuned proofs;
wenzelm
parents: 44890
diff changeset
   254
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   255
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   256
lemma image_lemma_2:
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   257
  assumes "finite s" "finite t" "card s = card t" "f ` s \<subseteq> t" "f ` s \<noteq> t" "b \<in> t"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   258
  shows "(card {s'. \<exists>a\<in>s. (s' = s - {a}) \<and> f ` s' = t - {b}} = 0) \<or>
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   259
         (card {s'. \<exists>a\<in>s. (s' = s - {a}) \<and> f ` s' = t - {b}} = 2)"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   260
proof (cases "{a\<in>s. f ` (s - {a}) = t - {b}} = {}")
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   261
  case True
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   262
  then show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   263
    apply -
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   264
    apply (rule disjI1, rule image_lemma_0)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   265
    using assms(1)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   266
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   267
    done
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   268
next
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   269
  let ?M = "{a\<in>s. f ` (s - {a}) = t - {b}}"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   270
  case False
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   271
  then obtain a where "a\<in>?M" by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   272
  then have a: "a\<in>s" "f ` (s - {a}) = t - {b}" by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   273
  have "f a \<in> t - {b}" using a and assms by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   274
  then have "\<exists>c \<in> s - {a}. f a = f c"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   275
    unfolding image_iff[symmetric] and a by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   276
  then obtain c where c: "c \<in> s" "a \<noteq> c" "f a = f c" by auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   277
  then have *: "f ` (s - {c}) = f ` (s - {a})"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   278
    apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   279
    apply (rule set_eqI, rule)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   280
  proof -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   281
    fix x
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   282
    assume "x \<in> f ` (s - {a})"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   283
    then obtain y where y: "f y = x" "y\<in>s- {a}" by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   284
    then show "x \<in> f ` (s - {c})"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   285
      unfolding image_iff
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   286
      apply (rule_tac x = "if y = c then a else y" in bexI)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   287
      using c a apply auto done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   288
  qed auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   289
  have "c\<in>?M"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   290
    unfolding mem_Collect_eq and *
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   291
    using a and c(1) by auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   292
  show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   293
    apply (rule disjI2, rule image_lemma_0) unfolding card_2_exists
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   294
    apply (rule bexI[OF _ `a\<in>?M`], rule bexI[OF _ `c\<in>?M`], rule, rule `a\<noteq>c`)
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   295
  proof (rule, unfold mem_Collect_eq, erule conjE)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   296
    fix z
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   297
    assume as: "z \<in> s" "f ` (s - {z}) = t - {b}"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   298
    have inj: "inj_on f (s - {z})"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   299
      apply (rule eq_card_imp_inj_on)
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   300
      unfolding as using as(1) and assms
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   301
      apply auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   302
      done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   303
    show "z = a \<or> z = c"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   304
    proof (rule ccontr)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   305
      assume "\<not> ?thesis"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   306
      then show False
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   307
        using inj[unfolded inj_on_def, THEN bspec[where x=a], THEN bspec[where x=c]]
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   308
        using `a\<in>s` `c\<in>s` `f a = f c` `a\<noteq>c`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   309
        apply auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   310
        done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   311
    qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   312
  qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   313
qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   314
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   315
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   316
subsection {* Combine this with the basic counting lemma. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   317
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   318
lemma kuhn_complete_lemma:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   319
  assumes "finite simplices"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   320
    "\<forall>f s. face f s \<longleftrightarrow> (\<exists>a\<in>s. f = s - {a})"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   321
    "\<forall>s\<in>simplices. card s = n + 2" "\<forall>s\<in>simplices. (rl ` s) \<subseteq> {0..n+1}"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   322
    "\<forall>f\<in> {f. \<exists>s\<in>simplices. face f s}. bnd f  \<longrightarrow> (card {s\<in>simplices. face f s} = 1)"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   323
    "\<forall>f\<in> {f. \<exists>s\<in>simplices. face f s}. \<not>bnd f \<longrightarrow> (card {s\<in>simplices. face f s} = 2)"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   324
    "odd(card {f\<in>{f. \<exists>s\<in>simplices. face f s}. rl ` f = {0..n} \<and> bnd f})"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   325
  shows "odd (card {s\<in>simplices. (rl ` s = {0..n+1})})"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   326
  apply (rule kuhn_counting_lemma)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   327
  defer
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   328
  apply (rule assms)+
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   329
  prefer 3
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   330
  apply (rule assms)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   331
proof (rule_tac[1-2] ballI impI)+
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   332
  have *: "{f. \<exists>s\<in>simplices. \<exists>a\<in>s. f = s - {a}} = (\<Union>s\<in>simplices. {f. \<exists>a\<in>s. (f = s - {a})})"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   333
    by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   334
  have **: "\<forall>s\<in>simplices. card s = n + 2 \<and> finite s"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   335
    using assms(3) by (auto intro: card_ge_0_finite)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   336
  show "finite {f. \<exists>s\<in>simplices. face f s}"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   337
    unfolding assms(2)[rule_format] and *
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   338
    apply (rule finite_UN_I[OF assms(1)])
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   339
    using **
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   340
    apply auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   341
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   342
  have *: "\<And>P f s. s\<in>simplices \<Longrightarrow> (f \<in> {f. \<exists>s\<in>simplices. \<exists>a\<in>s. f = s - {a}}) \<and>
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   343
    (\<exists>a\<in>s. (f = s - {a})) \<and> P f \<longleftrightarrow> (\<exists>a\<in>s. (f = s - {a}) \<and> P f)" by auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   344
  fix s assume s: "s\<in>simplices"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   345
  let ?S = "{f \<in> {f. \<exists>s\<in>simplices. face f s}. face f s \<and> rl ` f = {0..n}}"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   346
  have "{0..n + 1} - {n + 1} = {0..n}" by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   347
  then have S: "?S = {s'. \<exists>a\<in>s. s' = s - {a} \<and> rl ` s' = {0..n + 1} - {n + 1}}"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   348
    apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   349
    apply (rule set_eqI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   350
    unfolding assms(2)[rule_format] mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   351
    unfolding *[OF s, unfolded mem_Collect_eq, where P="\<lambda>x. rl ` x = {0..n}"]
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   352
    apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   353
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   354
  show "rl ` s = {0..n+1} \<Longrightarrow> card ?S = 1" "rl ` s \<noteq> {0..n+1} \<Longrightarrow> card ?S = 0 \<or> card ?S = 2"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   355
    unfolding S
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   356
    apply(rule_tac[!] image_lemma_1 image_lemma_2)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   357
    using ** assms(4) and s
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   358
    apply auto
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   359
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   360
qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   361
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   362
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   363
subsection {*We use the following notion of ordering rather than pointwise indexing. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   364
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   365
definition "kle n x y \<longleftrightarrow> (\<exists>k\<subseteq>{1..n::nat}. (\<forall>j. y(j) = x(j) + (if j \<in> k then (1::nat) else 0)))"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   366
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   367
lemma kle_refl [intro]: "kle n x x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   368
  unfolding kle_def by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   369
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   370
lemma kle_antisym: "kle n x y \<and> kle n y x \<longleftrightarrow> (x = y)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   371
  unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   372
  apply rule
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   373
  apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   374
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   375
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   376
lemma pointwise_minimal_pointwise_maximal:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   377
  fixes s :: "(nat \<Rightarrow> nat) set"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   378
  assumes "finite s" "s \<noteq> {}" "\<forall>x\<in>s. \<forall>y\<in>s. (\<forall>j. x j \<le> y j) \<or> (\<forall>j. y j \<le> x j)"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   379
  shows "\<exists>a\<in>s. \<forall>x\<in>s. \<forall>j. a j \<le> x j" "\<exists>a\<in>s. \<forall>x\<in>s. \<forall>j. x j \<le> a j"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   380
  using assms unfolding atomize_conj
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   381
proof (induct s rule: finite_induct)
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   382
  fix x and F::"(nat\<Rightarrow>nat) set"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   383
  assume as:"finite F" "x \<notin> F"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   384
    "\<lbrakk>F \<noteq> {}; \<forall>x\<in>F. \<forall>y\<in>F. (\<forall>j. x j \<le> y j) \<or> (\<forall>j. y j \<le> x j)\<rbrakk>
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   385
        \<Longrightarrow> (\<exists>a\<in>F. \<forall>x\<in>F. \<forall>j. a j \<le> x j) \<and> (\<exists>a\<in>F. \<forall>x\<in>F. \<forall>j. x j \<le> a j)" "insert x F \<noteq> {}"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   386
    "\<forall>xa\<in>insert x F. \<forall>y\<in>insert x F. (\<forall>j. xa j \<le> y j) \<or> (\<forall>j. y j \<le> xa j)"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   387
  show "(\<exists>a\<in>insert x F. \<forall>x\<in>insert x F. \<forall>j. a j \<le> x j) \<and> (\<exists>a\<in>insert x F. \<forall>x\<in>insert x F. \<forall>j. x j \<le> a j)"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   388
  proof (cases "F = {}")
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   389
    case True
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   390
    then show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   391
      apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   392
      apply (rule, rule_tac[!] x=x in bexI)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   393
      apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   394
      done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   395
  next
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   396
    case False
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   397
    obtain a b where a: "a\<in>insert x F" "\<forall>x\<in>F. \<forall>j. a j \<le> x j"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   398
      and b: "b \<in> insert x F" "\<forall>x\<in>F. \<forall>j. x j \<le> b j"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   399
      using as(3)[OF False] using as(5) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   400
    have "\<exists>a \<in> insert x F. \<forall>x \<in> insert x F. \<forall>j. a j \<le> x j"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   401
      using as(5)[rule_format,OF a(1) insertI1]
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   402
      apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   403
    proof (erule disjE)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   404
      assume "\<forall>j. a j \<le> x j"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   405
      then show ?thesis
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   406
        apply (rule_tac x=a in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   407
        using a apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   408
        done
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   409
    next
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   410
      assume "\<forall>j. x j \<le> a j"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   411
      then show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   412
        apply (rule_tac x=x in bexI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   413
        apply (rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   414
        apply (insert a)
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   415
        apply (erule_tac x=xa in ballE)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   416
        apply (erule_tac x=j in allE)+
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   417
        apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   418
        done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   419
    qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   420
    moreover
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   421
    have "\<exists>b\<in>insert x F. \<forall>x\<in>insert x F. \<forall>j. x j \<le> b j"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   422
      using as(5)[rule_format,OF b(1) insertI1]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   423
      apply -
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   424
    proof (erule disjE)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   425
      assume "\<forall>j. x j \<le> b j"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   426
      then show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   427
        apply(rule_tac x=b in bexI) using b
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   428
        apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   429
        done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   430
    next
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   431
      assume "\<forall>j. b j \<le> x j"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   432
      then show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   433
        apply (rule_tac x=x in bexI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   434
        apply (rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   435
        apply (insert b)
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   436
        apply (erule_tac x=xa in ballE)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   437
        apply (erule_tac x=j in allE)+
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   438
        apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   439
        done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   440
    qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   441
    ultimately show ?thesis by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   442
  qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   443
qed auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   444
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   445
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   446
lemma kle_imp_pointwise: "kle n x y \<Longrightarrow> (\<forall>j. x j \<le> y j)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   447
  unfolding kle_def by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   448
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   449
lemma pointwise_antisym:
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   450
  fixes x :: "nat \<Rightarrow> nat"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   451
  shows "(\<forall>j. x j \<le> y j) \<and> (\<forall>j. y j \<le> x j) \<longleftrightarrow> x = y"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   452
  apply (rule, rule ext, erule conjE)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   453
  apply (erule_tac x = xa in allE)+
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   454
  apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   455
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   456
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   457
lemma kle_trans:
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   458
  assumes "kle n x y" "kle n y z" "kle n x z \<or> kle n z x"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   459
  shows "kle n x z"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   460
  using assms
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   461
    apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   462
    apply (erule disjE)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   463
    apply assumption
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   464
proof -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   465
  case goal1
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   466
  then have "x = z"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   467
    apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   468
    apply (rule ext)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   469
    apply (drule kle_imp_pointwise)+
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   470
    apply (erule_tac x=xa in allE)+
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   471
    apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   472
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   473
  then show ?case by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   474
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   475
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   476
lemma kle_strict:
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   477
  assumes "kle n x y" "x \<noteq> y"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   478
  shows "\<forall>j. x j \<le> y j"  "\<exists>k. 1 \<le> k \<and> k \<le> n \<and> x(k) < y(k)"
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   479
  apply (rule kle_imp_pointwise[OF assms(1)])
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   480
proof -
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   481
  guess k using assms(1)[unfolded kle_def] .. note k = this
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   482
  show "\<exists>k. 1 \<le> k \<and> k \<le> n \<and> x(k) < y(k)"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   483
proof (cases "k = {}")
49555
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   484
  case True
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   485
  then have "x = y"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   486
    apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   487
    apply (rule ext)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   488
    using k apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   489
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   490
  then show ?thesis using assms(2) by auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   491
next
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   492
  case False
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   493
  then have "(SOME k'. k' \<in> k) \<in> k"
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   494
    apply -
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   495
    apply (rule someI_ex)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   496
    apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   497
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   498
  then show ?thesis
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   499
    apply (rule_tac x = "SOME k'. k' \<in> k" in exI)
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   500
    using k apply auto
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   501
    done
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   502
  qed
fb2128470345 tuned proofs;
wenzelm
parents: 49374
diff changeset
   503
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   504
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   505
lemma kle_minimal:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   506
  assumes "finite s" "s \<noteq> {}" "\<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   507
  shows "\<exists>a\<in>s. \<forall>x\<in>s. kle n a x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   508
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   509
  have "\<exists>a\<in>s. \<forall>x\<in>s. \<forall>j. a j \<le> x j"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   510
    apply (rule pointwise_minimal_pointwise_maximal(1)[OF assms(1-2)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   511
    apply (rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   512
    apply (drule_tac assms(3)[rule_format], assumption)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   513
    using kle_imp_pointwise
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   514
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   515
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   516
  then guess a .. note a = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   517
  show ?thesis
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   518
    apply (rule_tac x = a in bexI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   519
  proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   520
    fix x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   521
    assume "x \<in> s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   522
    show "kle n a x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   523
      using assms(3)[rule_format,OF a(1) `x\<in>s`]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   524
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   525
    proof (erule disjE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   526
      assume "kle n x a"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   527
      then have "x = a"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   528
        apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   529
        unfolding pointwise_antisym[symmetric]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   530
        apply (drule kle_imp_pointwise)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   531
        using a(2)[rule_format,OF `x\<in>s`]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   532
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   533
        done
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   534
      then show ?thesis using kle_refl by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   535
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   536
  qed (insert a, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   537
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   538
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   539
lemma kle_maximal:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   540
  assumes "finite s" "s \<noteq> {}" "\<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   541
  shows "\<exists>a\<in>s. \<forall>x\<in>s. kle n x a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   542
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   543
  have "\<exists>a\<in>s. \<forall>x\<in>s. \<forall>j. a j \<ge> x j"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   544
    apply (rule pointwise_minimal_pointwise_maximal(2)[OF assms(1-2)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   545
    apply (rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   546
    apply (drule_tac assms(3)[rule_format],assumption)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   547
    using kle_imp_pointwise apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   548
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   549
  then guess a .. note a = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   550
  show ?thesis 
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   551
    apply (rule_tac x = a in bexI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   552
  proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   553
    fix x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   554
    assume "x \<in> s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   555
    show "kle n x a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   556
      using assms(3)[rule_format,OF a(1) `x\<in>s`]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   557
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   558
    proof (erule disjE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   559
      assume "kle n a x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   560
      hence "x = a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   561
        apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   562
        unfolding pointwise_antisym[symmetric]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   563
        apply (drule kle_imp_pointwise)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   564
        using a(2)[rule_format,OF `x\<in>s`] apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   565
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   566
      thus ?thesis using kle_refl by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   567
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   568
  qed (insert a, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   569
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   570
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   571
lemma kle_strict_set:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   572
  assumes "kle n x y" "x \<noteq> y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   573
  shows "1 \<le> card {k\<in>{1..n}. x k < y k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   574
proof -
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   575
  guess i using kle_strict(2)[OF assms] ..
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   576
  hence "card {i} \<le> card {k\<in>{1..n}. x k < y k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   577
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   578
    apply (rule card_mono)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   579
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   580
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   581
  thus ?thesis by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   582
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   583
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   584
lemma kle_range_combine:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   585
  assumes "kle n x y" "kle n y z" "kle n x z \<or> kle n z x"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   586
    "m1 \<le> card {k\<in>{1..n}. x k < y k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   587
    "m2 \<le> card {k\<in>{1..n}. y k < z k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   588
  shows "kle n x z \<and> m1 + m2 \<le> card {k\<in>{1..n}. x k < z k}"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   589
  apply (rule, rule kle_trans[OF assms(1-3)])
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   590
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   591
  have "\<And>j. x j < y j \<Longrightarrow> x j < z j"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   592
    apply (rule less_le_trans)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   593
    using kle_imp_pointwise[OF assms(2)]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   594
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   595
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   596
  moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   597
  have "\<And>j. y j < z j \<Longrightarrow> x j < z j"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   598
    apply (rule le_less_trans)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   599
    using kle_imp_pointwise[OF assms(1)]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   600
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   601
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   602
  ultimately
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   603
  have *: "{k\<in>{1..n}. x k < y k} \<union> {k\<in>{1..n}. y k < z k} = {k\<in>{1..n}. x k < z k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   604
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   605
  have **: "{k \<in> {1..n}. x k < y k} \<inter> {k \<in> {1..n}. y k < z k} = {}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   606
    unfolding disjoint_iff_not_equal
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   607
    apply (rule, rule, unfold mem_Collect_eq, rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   608
    apply (erule conjE)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   609
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   610
    fix i j
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   611
    assume as: "i \<in> {1..n}" "x i < y i" "j \<in> {1..n}" "y j < z j" "\<not> i \<noteq> j"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   612
    guess kx using assms(1)[unfolded kle_def] .. note kx = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   613
    have "x i < y i" using as by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   614
    hence "i \<in> kx" using as(1) kx
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   615
      apply (rule_tac ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   616
      apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   617
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   618
    hence "x i + 1 = y i" using kx by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   619
    moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   620
    guess ky using assms(2)[unfolded kle_def] .. note ky = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   621
    have "y i < z i" using as by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   622
    hence "i \<in> ky" using as(1) ky
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   623
      apply (rule_tac ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   624
      apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   625
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   626
    hence "y i + 1 = z i" using ky by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   627
    ultimately
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   628
    have "z i = x i + 2" by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   629
    thus False using assms(3) unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   630
      by (auto simp add: split_if_eq1)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   631
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   632
  have fin: "\<And>P. finite {x\<in>{1..n::nat}. P x}" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   633
  have "m1 + m2 \<le> card {k\<in>{1..n}. x k < y k} + card {k\<in>{1..n}. y k < z k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   634
    using assms(4-5) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   635
  also have "\<dots> \<le> card {k\<in>{1..n}. x k < z k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   636
    unfolding card_Un_Int[OF fin fin] unfolding * ** by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   637
  finally show " m1 + m2 \<le> card {k \<in> {1..n}. x k < z k}" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   638
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   639
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   640
lemma kle_range_combine_l:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   641
  assumes "kle n x y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   642
    and "kle n y z"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   643
    and "kle n x z \<or> kle n z x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   644
    and "m \<le> card {k\<in>{1..n}. y(k) < z(k)}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   645
  shows "kle n x z \<and> m \<le> card {k\<in>{1..n}. x(k) < z(k)}"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   646
  using kle_range_combine[OF assms(1-3) _ assms(4), of 0] by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   647
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   648
lemma kle_range_combine_r:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   649
  assumes "kle n x y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   650
    and "kle n y z"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   651
    and "kle n x z \<or> kle n z x" "m \<le> card {k\<in>{1..n}. x k < y k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   652
  shows "kle n x z \<and> m \<le> card {k\<in>{1..n}. x(k) < z(k)}"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   653
  using kle_range_combine[OF assms(1-3) assms(4), of 0] by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   654
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   655
lemma kle_range_induct:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   656
  assumes "card s = Suc m"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   657
    and "\<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   658
  shows "\<exists>x\<in>s. \<exists>y\<in>s. kle n x y \<and> m \<le> card {k\<in>{1..n}. x k < y k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   659
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   660
  have "finite s" "s\<noteq>{}" using assms(1)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   661
    by (auto intro: card_ge_0_finite)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   662
  thus ?thesis using assms
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   663
  proof (induct m arbitrary: s)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   664
    case 0
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   665
    thus ?case using kle_refl by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   666
  next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   667
    case (Suc m)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   668
    then obtain a where a: "a \<in> s" "\<forall>x\<in>s. kle n a x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   669
      using kle_minimal[of s n] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   670
    show ?case
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   671
    proof (cases "s \<subseteq> {a}")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   672
      case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   673
      hence "card (s - {a}) = Suc m" "s - {a} \<noteq> {}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   674
        using card_Diff_singleton[OF _ a(1)] Suc(4) `finite s` by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   675
      then obtain x b where xb:"x\<in>s - {a}" "b\<in>s - {a}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   676
        "kle n x b" "m \<le> card {k \<in> {1..n}. x k < b k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   677
        using Suc(1)[of "s - {a}"] using Suc(5) `finite s` by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   678
      have "1 \<le> card {k \<in> {1..n}. a k < x k}" "m \<le> card {k \<in> {1..n}. x k < b k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   679
        apply (rule kle_strict_set)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   680
        apply (rule a(2)[rule_format])
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   681
        using a and xb
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   682
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   683
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   684
      thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   685
        apply (rule_tac x=a in bexI, rule_tac x=b in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   686
        using kle_range_combine[OF a(2)[rule_format] xb(3) Suc(5)[rule_format], of 1 "m"]
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   687
        using a(1) xb(1-2)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   688
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   689
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   690
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   691
      case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   692
      hence "s = {a}" using Suc(3) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   693
      hence "card s = 1" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   694
      hence False using Suc(4) `finite s` by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   695
      thus ?thesis by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   696
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   697
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   698
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   699
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   700
lemma kle_Suc: "kle n x y \<Longrightarrow> kle (n + 1) x y"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   701
  unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   702
  apply (erule exE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   703
  apply (rule_tac x=k in exI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   704
  apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   705
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   706
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   707
lemma kle_trans_1:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   708
  assumes "kle n x y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   709
  shows "x j \<le> y j" "y j \<le> x j + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   710
  using assms[unfolded kle_def] by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   711
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   712
lemma kle_trans_2:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   713
  assumes "kle n a b" "kle n b c" "\<forall>j. c j \<le> a j + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   714
  shows "kle n a c"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   715
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   716
  guess kk1 using assms(1)[unfolded kle_def] .. note kk1 = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   717
  guess kk2 using assms(2)[unfolded kle_def] .. note kk2 = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   718
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   719
    unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   720
    apply (rule_tac x="kk1 \<union> kk2" in exI)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   721
    apply rule
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   722
    defer
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   723
  proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   724
    fix i
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   725
    show "c i = a i + (if i \<in> kk1 \<union> kk2 then 1 else 0)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   726
    proof (cases "i \<in> kk1 \<union> kk2")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   727
      case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   728
      hence "c i \<ge> a i + (if i \<in> kk1 \<union> kk2 then 1 else 0)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   729
        unfolding kk1[THEN conjunct2,rule_format,of i] kk2[THEN conjunct2,rule_format,of i]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   730
        by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   731
      moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   732
      have "c i \<le> a i + (if i \<in> kk1 \<union> kk2 then 1 else 0)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   733
        using True assms(3) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   734
      ultimately show ?thesis by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   735
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   736
      case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   737
      thus ?thesis using kk1 kk2 by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   738
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   739
  qed (insert kk1 kk2, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   740
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   741
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   742
lemma kle_between_r:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   743
  assumes "kle n a b" "kle n b c" "kle n a x" "kle n c x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   744
  shows "kle n b x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   745
  apply (rule kle_trans_2[OF assms(2,4)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   746
proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   747
  have *: "\<And>c b x::nat. x \<le> c + 1 \<Longrightarrow> c \<le> b \<Longrightarrow> x \<le> b + 1" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   748
  fix j
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   749
  show "x j \<le> b j + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   750
    apply (rule *)
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   751
    using kle_trans_1[OF assms(1),of j] kle_trans_1[OF assms(3), of j]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   752
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   753
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   754
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   755
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   756
lemma kle_between_l:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   757
  assumes "kle n a b" "kle n b c" "kle n x a" "kle n x c"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   758
  shows "kle n x b"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   759
  apply (rule kle_trans_2[OF assms(3,1)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   760
proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   761
  have *: "\<And>c b x::nat. c \<le> x + 1 \<Longrightarrow> b \<le> c \<Longrightarrow> b \<le> x + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   762
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   763
  fix j
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   764
  show "b j \<le> x j + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   765
    apply (rule *)
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   766
    using kle_trans_1[OF assms(2),of j] kle_trans_1[OF assms(4), of j]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   767
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   768
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   769
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   770
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   771
lemma kle_adjacent:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   772
  assumes "\<forall>j. b j = (if j = k then a(j) + 1 else a j)" "kle n a x" "kle n x b"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   773
  shows "x = a \<or> x = b"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   774
proof (cases "x k = a k")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   775
  case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   776
  show ?thesis
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   777
    apply (rule disjI1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   778
    apply (rule ext)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   779
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   780
    fix j
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   781
    have "x j \<le> a j" using kle_imp_pointwise[OF assms(3),THEN spec[where x=j]]
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   782
      unfolding assms(1)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   783
      apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   784
      apply(cases "j = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   785
      using True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   786
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   787
      done
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   788
    then show "x j = a j"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   789
      using kle_imp_pointwise[OF assms(2),THEN spec[where x=j]] by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   790
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   791
next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   792
  case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   793
  show ?thesis apply(rule disjI2,rule ext)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   794
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   795
    fix j
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   796
    have "x j \<ge> b j"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   797
      using kle_imp_pointwise[OF assms(2),THEN spec[where x=j]]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   798
      unfolding assms(1)[rule_format]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   799
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   800
      apply(cases "j = k")
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   801
      using False by auto
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   802
    then show "x j = b j"
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   803
      using kle_imp_pointwise[OF assms(3),THEN spec[where x=j]]
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   804
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   805
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   806
qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   807
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   808
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   809
subsection {* kuhn's notion of a simplex (a reformulation to avoid so much indexing). *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   810
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   811
definition "ksimplex p n (s::(nat \<Rightarrow> nat) set) \<longleftrightarrow>
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   812
  (card s = n + 1 \<and>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   813
  (\<forall>x\<in>s. \<forall>j. x(j) \<le> p) \<and>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   814
  (\<forall>x\<in>s. \<forall>j. j\<notin>{1..n} \<longrightarrow> (x j = p)) \<and>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
   815
  (\<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x))"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   816
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   817
lemma ksimplexI:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   818
  "card s = n + 1 \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   819
  \<forall>x\<in>s. \<forall>j. x j \<le> p \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   820
  \<forall>x\<in>s. \<forall>j. j \<notin> {1..n} \<longrightarrow> x j = p \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   821
  \<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   822
  ksimplex p n s"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   823
  unfolding ksimplex_def by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   824
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   825
lemma ksimplex_eq:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   826
  "ksimplex p n (s::(nat \<Rightarrow> nat) set) \<longleftrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   827
    (card s = n + 1 \<and> finite s \<and>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   828
    (\<forall>x\<in>s. \<forall>j. x(j) \<le> p) \<and>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   829
    (\<forall>x\<in>s. \<forall>j. j\<notin>{1..n} \<longrightarrow> (x j = p)) \<and>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   830
    (\<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x))"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   831
  unfolding ksimplex_def by (auto intro: card_ge_0_finite)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   832
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   833
lemma ksimplex_extrema:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   834
  assumes "ksimplex p n s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   835
  obtains a b where "a \<in> s" "b \<in> s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   836
    "\<forall>x\<in>s. kle n a x \<and> kle n x b" "\<forall>i. b(i) = (if i \<in> {1..n} then a(i) + 1 else a(i))"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   837
proof (cases "n = 0")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   838
  case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   839
  obtain x where *: "s = {x}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   840
    using assms[unfolded ksimplex_eq True,THEN conjunct1]
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   841
    unfolding add_0_left card_1_exists by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   842
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   843
    apply (rule that[of x x]) unfolding * True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   844
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   845
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   846
next
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   847
  note assm = assms[unfolded ksimplex_eq]
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   848
  case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   849
  have "s\<noteq>{}" using assm by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   850
  obtain a where a: "a \<in> s" "\<forall>x\<in>s. kle n a x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   851
    using `s\<noteq>{}` assm using kle_minimal[of s n] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   852
  obtain b where b: "b \<in> s" "\<forall>x\<in>s. kle n x b"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   853
    using `s\<noteq>{}` assm using kle_maximal[of s n] by auto
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
   854
  obtain c d where c_d: "c \<in> s" "d \<in> s" "kle n c d" "n \<le> card {k \<in> {1..n}. c k < d k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   855
    using kle_range_induct[of s n n] using assm by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   856
  have "kle n c b \<and> n \<le> card {k \<in> {1..n}. c k < b k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   857
    apply (rule kle_range_combine_r[where y=d])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   858
    using c_d a b
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   859
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   860
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   861
  hence "kle n a b \<and> n \<le> card {k\<in>{1..n}. a(k) < b(k)}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   862
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   863
    apply (rule kle_range_combine_l[where y=c])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   864
    using a `c \<in> s` `b \<in> s`
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   865
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   866
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   867
  moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   868
  have "card {1..n} \<ge> card {k\<in>{1..n}. a(k) < b(k)}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   869
    by (rule card_mono) auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   870
  ultimately
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   871
  have *: "{k\<in>{1 .. n}. a k < b k} = {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   872
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   873
    apply (rule card_subset_eq)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   874
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   875
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   876
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   877
    apply (rule that[OF a(1) b(1)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   878
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   879
    apply (subst *[symmetric]) unfolding mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   880
  proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   881
    guess k using a(2)[rule_format,OF b(1),unfolded kle_def] .. note k = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   882
    fix i
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   883
    show "b i = (if i \<in> {1..n} \<and> a i < b i then a i + 1 else a i)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   884
    proof (cases "i \<in> {1..n}")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   885
      case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   886
      thus ?thesis unfolding k[THEN conjunct2,rule_format] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   887
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   888
      case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   889
      have "a i = p" using assm and False `a\<in>s` by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   890
      moreover have "b i = p" using assm and False `b\<in>s` by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   891
      ultimately show ?thesis by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   892
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   893
  qed(insert a(2) b(2) assm, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   894
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   895
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   896
lemma ksimplex_extrema_strong:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   897
  assumes "ksimplex p n s" "n \<noteq> 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   898
  obtains a b where "a \<in> s" "b \<in> s" "a \<noteq> b"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   899
    "\<forall>x\<in>s. kle n a x \<and> kle n x b" "\<forall>i. b(i) = (if i \<in> {1..n} then a(i) + 1 else a(i))"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   900
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   901
  obtain a b where ab: "a \<in> s" "b \<in> s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   902
    "\<forall>x\<in>s. kle n a x \<and> kle n x b" "\<forall>i. b(i) = (if i \<in> {1..n} then a(i) + 1 else a(i))"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   903
    apply (rule ksimplex_extrema[OF assms(1)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   904
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   905
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   906
  have "a \<noteq> b"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   907
    apply (rule notI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   908
    apply (drule cong[of _ _ 1 1])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   909
    using ab(4) assms(2) apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   910
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   911
  thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   912
    apply (rule_tac that[of a b])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   913
    using ab apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   914
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   915
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   916
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   917
lemma ksimplexD:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   918
  assumes "ksimplex p n s"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   919
  shows "card s = n + 1" "finite s" "card s = n + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   920
    "\<forall>x\<in>s. \<forall>j. x j \<le> p" "\<forall>x\<in>s. \<forall>j. j \<notin> {1..n} \<longrightarrow> x j = p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   921
    "\<forall>x\<in>s. \<forall>y\<in>s. kle n x y \<or> kle n y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   922
  using assms unfolding ksimplex_eq by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   923
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   924
lemma ksimplex_successor:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   925
  assumes "ksimplex p n s" "a \<in> s"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   926
  shows "(\<forall>x\<in>s. kle n x a) \<or> (\<exists>y\<in>s. \<exists>k\<in>{1..n}. \<forall>j. y(j) = (if j = k then a(j) + 1 else a(j)))"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   927
proof (cases "\<forall>x\<in>s. kle n x a")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   928
  case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   929
  thus ?thesis by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   930
next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   931
  note assm = ksimplexD[OF assms(1)]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   932
  case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   933
  then obtain b where b: "b\<in>s" "\<not> kle n b a" "\<forall>x\<in>{x \<in> s. \<not> kle n x a}. kle n b x"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   934
    using kle_minimal[of "{x\<in>s. \<not> kle n x a}" n] and assm by auto
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   935
  then have **: "1 \<le> card {k\<in>{1..n}. a k < b k}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   936
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   937
    apply (rule kle_strict_set)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   938
    using assm(6) and `a\<in>s`
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   939
    apply (auto simp add:kle_refl)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   940
    done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   941
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   942
  let ?kle1 = "{x \<in> s. \<not> kle n x a}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   943
  have "card ?kle1 > 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   944
    apply (rule ccontr)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   945
    using assm(2) and False
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   946
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   947
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   948
  hence sizekle1: "card ?kle1 = Suc (card ?kle1 - 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   949
    using assm(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   950
  obtain c d where c_d: "c \<in> s" "\<not> kle n c a" "d \<in> s" "\<not> kle n d a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   951
    "kle n c d" "card ?kle1 - 1 \<le> card {k \<in> {1..n}. c k < d k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   952
    using kle_range_induct[OF sizekle1, of n] using assm by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   953
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   954
  let ?kle2 = "{x \<in> s. kle n x a}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   955
  have "card ?kle2 > 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   956
    apply (rule ccontr)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   957
    using assm(6)[rule_format,of a a] and `a\<in>s` and assm(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   958
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   959
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   960
  hence sizekle2: "card ?kle2 = Suc (card ?kle2 - 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   961
    using assm(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   962
  obtain e f where e_f: "e \<in> s" "kle n e a" "f \<in> s" "kle n f a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   963
    "kle n e f" "card ?kle2 - 1 \<le> card {k \<in> {1..n}. e k < f k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   964
    using kle_range_induct[OF sizekle2, of n] using assm by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   965
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   966
  have "card {k\<in>{1..n}. a k < b k} = 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   967
  proof (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   968
    case goal1
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   969
    hence as: "card {k\<in>{1..n}. a k < b k} \<ge> 2"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   970
      using ** by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   971
    have *: "finite ?kle2" "finite ?kle1" "?kle2 \<union> ?kle1 = s" "?kle2 \<inter> ?kle1 = {}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   972
      using assm(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   973
    have "(card ?kle2 - 1) + 2 + (card ?kle1 - 1) = card ?kle2 + card ?kle1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   974
      using sizekle1 sizekle2 by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   975
    also have "\<dots> = n + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   976
      unfolding card_Un_Int[OF *(1-2)] *(3-) using assm(3) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   977
    finally have n: "(card ?kle2 - 1) + (2 + (card ?kle1 - 1)) = n + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   978
      by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   979
    have "kle n e a \<and> card {x \<in> s. kle n x a} - 1 \<le> card {k \<in> {1..n}. e k < a k}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   980
      apply (rule kle_range_combine_r[where y=f])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   981
      using e_f using `a\<in>s` assm(6)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   982
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   983
      done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
   984
    moreover have "kle n b d \<and> card {x \<in> s. \<not> kle n x a} - 1 \<le> card {k \<in> {1..n}. b k < d k}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   985
      apply (rule kle_range_combine_l[where y=c])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   986
      using c_d using assm(6) and b
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
   987
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   988
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   989
    hence "kle n a d \<and> 2 + (card {x \<in> s. \<not> kle n x a} - 1) \<le> card {k \<in> {1..n}. a k < d k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   990
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   991
      apply (rule kle_range_combine[where y=b]) using as and b assm(6) `a\<in>s` `d\<in>s`
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   992
      apply blast+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   993
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   994
    ultimately
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   995
    have "kle n e d \<and> (card ?kle2 - 1) + (2 + (card ?kle1 - 1)) \<le> card {k\<in>{1..n}. e k < d k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   996
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   997
      apply (rule kle_range_combine[where y=a]) using assm(6)[rule_format,OF `e\<in>s` `d\<in>s`]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   998
      apply blast+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
   999
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1000
    moreover have "card {k \<in> {1..n}. e k < d k} \<le> card {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1001
      by (rule card_mono) auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1002
    ultimately show False unfolding n by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1003
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1004
  then guess k unfolding card_1_exists .. note k = this[unfolded mem_Collect_eq]
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1005
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1006
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1007
    apply (rule disjI2)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1008
    apply (rule_tac x=b in bexI, rule_tac x=k in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1009
  proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1010
    fix j :: nat
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1011
    have "kle n a b"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1012
      using b and assm(6)[rule_format, OF `a\<in>s` `b\<in>s`] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1013
    then guess kk unfolding kle_def .. note kk_raw = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1014
    note kk = this[THEN conjunct2, rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1015
    have kkk: "k \<in> kk"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1016
      apply (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1017
      using k(1)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1018
      unfolding kk
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1019
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1020
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1021
    show "b j = (if j = k then a j + 1 else a j)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1022
    proof (cases "j \<in> kk")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1023
      case True
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1024
      then have "j = k"
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1025
        apply -
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1026
        apply (rule k(2)[rule_format])
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1027
        using kk_raw kkk
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1028
        apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1029
        done
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1030
      then show ?thesis unfolding kk using kkk by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1031
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1032
      case False
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1033
      then have "j \<noteq> k"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1034
        using k(2)[rule_format, of j k] and kk_raw kkk by auto
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1035
      then show ?thesis unfolding kk using kkk and False
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1036
        by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1037
    qed
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1038
  qed (insert k(1) `b\<in>s`, auto)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1039
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1040
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1041
lemma ksimplex_predecessor:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1042
  assumes "ksimplex p n s" "a \<in> s"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1043
  shows "(\<forall>x\<in>s. kle n a x) \<or> (\<exists>y\<in>s. \<exists>k\<in>{1..n}. \<forall>j. a(j) = (if j = k then y(j) + 1 else y(j)))"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1044
proof (cases "\<forall>x\<in>s. kle n a x")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1045
  case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1046
  thus ?thesis by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1047
next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1048
  note assm = ksimplexD[OF assms(1)]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1049
  case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1050
  then obtain b where b:"b\<in>s" "\<not> kle n a b" "\<forall>x\<in>{x \<in> s. \<not> kle n a x}. kle n x b"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1051
    using kle_maximal[of "{x\<in>s. \<not> kle n a x}" n] and assm by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1052
  hence **: "1 \<le> card {k\<in>{1..n}. a k > b k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1053
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1054
    apply (rule kle_strict_set)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1055
    using assm(6) and `a\<in>s`
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1056
    apply (auto simp add: kle_refl)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1057
    done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1058
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1059
  let ?kle1 = "{x \<in> s. \<not> kle n a x}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1060
  have "card ?kle1 > 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1061
    apply (rule ccontr)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1062
    using assm(2) and False
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1063
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1064
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1065
  hence sizekle1: "card ?kle1 = Suc (card ?kle1 - 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1066
    using assm(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1067
  obtain c d where c_d: "c \<in> s" "\<not> kle n a c" "d \<in> s" "\<not> kle n a d"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1068
    "kle n d c" "card ?kle1 - 1 \<le> card {k \<in> {1..n}. c k > d k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1069
    using kle_range_induct[OF sizekle1, of n] using assm by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1070
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1071
  let ?kle2 = "{x \<in> s. kle n a x}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1072
  have "card ?kle2 > 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1073
    apply (rule ccontr)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1074
    using assm(6)[rule_format,of a a] and `a\<in>s` and assm(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1075
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1076
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1077
  hence sizekle2:"card ?kle2 = Suc (card ?kle2 - 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1078
    using assm(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1079
  obtain e f where e_f: "e \<in> s" "kle n a e" "f \<in> s" "kle n a f"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1080
    "kle n f e" "card ?kle2 - 1 \<le> card {k \<in> {1..n}. e k > f k}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1081
    using kle_range_induct[OF sizekle2, of n] using assm by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1082
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1083
  have "card {k\<in>{1..n}. a k > b k} = 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1084
  proof (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1085
    case goal1
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1086
    hence as: "card {k\<in>{1..n}. a k > b k} \<ge> 2"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1087
      using ** by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1088
    have *: "finite ?kle2" "finite ?kle1" "?kle2 \<union> ?kle1 = s" "?kle2 \<inter> ?kle1 = {}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1089
      using assm(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1090
    have "(card ?kle2 - 1) + 2 + (card ?kle1 - 1) = card ?kle2 + card ?kle1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1091
      using sizekle1 sizekle2 by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1092
    also have "\<dots> = n + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1093
      unfolding card_Un_Int[OF *(1-2)] *(3-) using assm(3) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1094
    finally have n: "(card ?kle1 - 1) + 2 + (card ?kle2 - 1) = n + 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1095
      by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1096
    have "kle n a e \<and> card {x \<in> s. kle n a x} - 1 \<le> card {k \<in> {1..n}. e k > a k}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1097
      apply (rule kle_range_combine_l[where y=f])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1098
      using e_f and `a\<in>s` assm(6)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1099
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1100
      done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1101
    moreover have "kle n d b \<and> card {x \<in> s. \<not> kle n a x} - 1 \<le> card {k \<in> {1..n}. b k > d k}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1102
      apply (rule kle_range_combine_r[where y=c])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1103
      using c_d and assm(6) and b
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1104
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1105
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1106
    hence "kle n d a \<and> (card {x \<in> s. \<not> kle n a x} - 1) + 2 \<le> card {k \<in> {1..n}. a k > d k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1107
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1108
      apply (rule kle_range_combine[where y=b]) using as and b assm(6) `a\<in>s` `d\<in>s`
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1109
      apply blast+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1110
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1111
    ultimately have "kle n d e \<and> (card ?kle1 - 1 + 2) + (card ?kle2 - 1) \<le> card {k\<in>{1..n}. e k > d k}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1112
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1113
      apply (rule kle_range_combine[where y=a])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1114
      using assm(6)[rule_format,OF `e\<in>s` `d\<in>s`]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1115
      apply blast+
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1116
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1117
    moreover have "card {k \<in> {1..n}. e k > d k} \<le> card {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1118
      by (rule card_mono) auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1119
    ultimately show False unfolding n by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1120
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1121
  then guess k unfolding card_1_exists .. note k = this[unfolded mem_Collect_eq]
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1122
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1123
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1124
    apply (rule disjI2)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1125
    apply (rule_tac x=b in bexI,rule_tac x=k in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1126
  proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1127
    fix j :: nat
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1128
    have "kle n b a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1129
      using b and assm(6)[rule_format, OF `a\<in>s` `b\<in>s`] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1130
    then guess kk unfolding kle_def .. note kk_raw = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1131
    note kk = this[THEN conjunct2,rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1132
    have kkk: "k \<in> kk"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1133
      apply (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1134
      using k(1)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1135
      unfolding kk
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1136
      apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1137
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1138
    show "a j = (if j = k then b j + 1 else b j)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1139
    proof (cases "j \<in> kk")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1140
      case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1141
      hence "j = k"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1142
        apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1143
        apply (rule k(2)[rule_format])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1144
        using kk_raw kkk
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1145
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1146
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1147
      thus ?thesis unfolding kk using kkk by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1148
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1149
      case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1150
      hence "j \<noteq> k" using k(2)[rule_format, of j k]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1151
        using kk_raw kkk by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1152
      thus ?thesis unfolding kk
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1153
        using kkk and False by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1154
    qed
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1155
  qed (insert k(1) `b\<in>s`, auto)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1156
qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1157
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1158
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1159
subsection {* The lemmas about simplices that we need. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1160
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1161
(* FIXME: These are clones of lemmas in Library/FuncSet *)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1162
lemma card_funspace':
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1163
  assumes "finite s" "finite t" "card s = m" "card t = n"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1164
  shows "card {f. (\<forall>x\<in>s. f x \<in> t) \<and> (\<forall>x\<in>UNIV - s. f x = d)} = n ^ m"  (is "card (?M s) = _")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1165
  using assms
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1166
  apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1167
proof (induct m arbitrary: s)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1168
  case 0
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1169
  have [simp]: "{f. \<forall>x. f x = d} = {\<lambda>x. d}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1170
    apply (rule set_eqI,rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1171
    unfolding mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1172
    apply (rule, rule ext)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1173
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1174
    done
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1175
  from 0 show ?case by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1176
next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1177
  case (Suc m)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1178
  guess a using card_eq_SucD[OF Suc(4)] ..
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1179
  then guess s0 by (elim exE conjE) note as0 = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1180
  have **: "card s0 = m"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1181
    using as0 using Suc(2) Suc(4) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1182
  let ?l = "(\<lambda>(b, g) x. if x = a then b else g x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1183
  have *: "?M (insert a s0) = ?l ` {(b,g). b\<in>t \<and> g\<in>?M s0}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1184
    apply (rule set_eqI, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1185
    unfolding mem_Collect_eq image_iff
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1186
    apply (erule conjE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1187
    apply (rule_tac x="(x a, \<lambda>y. if y\<in>s0 then x y else d)" in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1188
    apply (rule ext)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1189
    prefer 3
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1190
    apply rule
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1191
    defer
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1192
    apply (erule bexE, rule)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1193
    unfolding mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1194
    apply (erule splitE)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1195
    apply (erule conjE)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1196
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1197
    fix x xa xb xc y
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1198
    assume as: "x = (\<lambda>(b, g) x. if x = a then b else g x) xa"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1199
      "xb \<in> UNIV - insert a s0" "xa = (xc, y)" "xc \<in> t"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1200
      "\<forall>x\<in>s0. y x \<in> t" "\<forall>x\<in>UNIV - s0. y x = d"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1201
    thus "x xb = d" unfolding as by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1202
  qed auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1203
  have inj: "inj_on ?l {(b,g). b\<in>t \<and> g\<in>?M s0}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1204
    unfolding inj_on_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1205
      apply (rule, rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1206
      unfolding mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1207
      apply (erule splitE conjE)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1208
  proof -
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1209
    case goal1 note as = this(1,4-)[unfolded goal1 split_conv]
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1210
    have "xa = xb" using as(1)[THEN cong[of _ _ a]] by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1211
    moreover have "ya = yb"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1212
    proof (rule ext)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1213
      fix x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1214
      show "ya x = yb x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1215
      proof (cases "x = a")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1216
        case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1217
        thus ?thesis using as(1)[THEN cong[of _ _ x x]] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1218
      next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1219
        case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1220
        thus ?thesis using as(5,7) using as0(2) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1221
      qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1222
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1223
    ultimately show ?case unfolding goal1 by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1224
  qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1225
  have "finite s0" using `finite s` unfolding as0 by simp
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1226
  show ?case
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1227
    unfolding as0 * card_image[OF inj]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1228
    using assms
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1229
    unfolding SetCompr_Sigma_eq
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1230
    unfolding card_cartesian_product
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1231
    using Suc(1)[OF `finite s0` `finite t` ** `card t = n`]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1232
    by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1233
qed
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1234
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1235
lemma card_funspace:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1236
  assumes "finite s" "finite t"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1237
  shows "card {f. (\<forall>x\<in>s. f x \<in> t) \<and> (\<forall>x\<in>UNIV - s. f x = d)} = (card t) ^ (card s)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1238
  using assms by (auto intro: card_funspace')
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1239
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1240
lemma finite_funspace:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1241
  assumes "finite s" "finite t"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1242
  shows "finite {f. (\<forall>x\<in>s. f x \<in> t) \<and> (\<forall>x\<in>UNIV - s. f x = d)}" (is "finite ?S")
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1243
proof (cases "card t > 0")
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1244
  case True
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1245
  have "card ?S = (card t) ^ (card s)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1246
    using assms by (auto intro!: card_funspace)
50027
7747a9f4c358 adjusting proofs as the set_comprehension_pointfree simproc breaks some existing proofs
bulwahn
parents: 49555
diff changeset
  1247
  thus ?thesis using True by (rule_tac card_ge_0_finite) simp
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1248
next
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1249
  case False hence "t = {}" using `finite t` by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1250
  show ?thesis
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1251
  proof (cases "s = {}")
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1252
    have *: "{f. \<forall>x. f x = d} = {\<lambda>x. d}" by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1253
    case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1254
    thus ?thesis using `t = {}` by (auto simp: *)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1255
  next
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1256
    case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1257
    thus ?thesis using `t = {}` by simp
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1258
  qed
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1259
qed
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1260
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1261
lemma finite_simplices: "finite {s. ksimplex p n s}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1262
  apply (rule finite_subset[of _ "{s. s\<subseteq>{f. (\<forall>i\<in>{1..n}. f i \<in> {0..p}) \<and> (\<forall>i\<in>UNIV-{1..n}. f i = p)}}"])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1263
  unfolding ksimplex_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1264
  defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1265
  apply (rule finite_Collect_subsets)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1266
  apply (rule finite_funspace)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1267
  apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1268
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1269
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1270
lemma simplex_top_face:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1271
  assumes "0 < p" "\<forall>x\<in>f. x (n + 1) = p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1272
  shows "(\<exists>s a. ksimplex p (n + 1) s \<and> a \<in> s \<and> (f = s - {a})) \<longleftrightarrow> ksimplex p n f" (is "?ls = ?rs")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1273
proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1274
  assume ?ls
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1275
  then guess s ..
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1276
  then guess a by (elim exE conjE) note sa = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1277
  show ?rs
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1278
    unfolding ksimplex_def sa(3)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1279
    apply rule
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1280
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1281
    apply rule
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1282
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1283
    apply (rule, rule, rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1284
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1285
    apply (rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1286
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1287
    fix x y
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1288
    assume as: "x \<in>s - {a}" "y \<in>s - {a}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1289
    have xyp: "x (n + 1) = y (n + 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1290
      using as(1)[unfolded sa(3)[symmetric], THEN assms(2)[rule_format]]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1291
      using as(2)[unfolded sa(3)[symmetric], THEN assms(2)[rule_format]]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1292
      by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1293
    show "kle n x y \<or> kle n y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1294
    proof (cases "kle (n + 1) x y")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1295
      case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1296
      then guess k unfolding kle_def .. note k = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1297
      hence *: "n + 1 \<notin> k" using xyp by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1298
      have "\<not> (\<exists>x\<in>k. x\<notin>{1..n})"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1299
        apply (rule notI)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1300
        apply (erule bexE)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1301
      proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1302
        fix x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1303
        assume as: "x \<in> k" "x \<notin> {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1304
        have "x \<noteq> n + 1" using as and * by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1305
        thus False using as and k[THEN conjunct1,unfolded subset_eq] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1306
      qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1307
      thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1308
        apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1309
        apply (rule disjI1)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1310
        unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1311
        using k
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1312
        apply (rule_tac x=k in exI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1313
        apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1314
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1315
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1316
      case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1317
      hence "kle (n + 1) y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1318
        using ksimplexD(6)[OF sa(1),rule_format, of x y] and as by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1319
      then guess k unfolding kle_def .. note k = this
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1320
      then have *: "n + 1 \<notin> k" using xyp by auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1321
      then have "\<not> (\<exists>x\<in>k. x\<notin>{1..n})"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1322
        apply -
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1323
        apply (rule notI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1324
        apply (erule bexE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1325
      proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1326
        fix x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1327
        assume as: "x \<in> k" "x \<notin> {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1328
        have "x \<noteq> n + 1" using as and * by auto
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1329
        then show False using as and k[THEN conjunct1,unfolded subset_eq] by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1330
      qed
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1331
      then show ?thesis
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1332
        apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1333
        apply (rule disjI2)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1334
        unfolding kle_def
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1335
        using k
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1336
        apply (rule_tac x = k in exI)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1337
        apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1338
        done
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1339
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1340
  next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1341
    fix x j
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1342
    assume as: "x \<in> s - {a}" "j\<notin>{1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1343
    thus "x j = p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1344
      using as(1)[unfolded sa(3)[symmetric], THEN assms(2)[rule_format]]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1345
      apply (cases "j = n+1")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1346
      using sa(1)[unfolded ksimplex_def]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1347
      apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1348
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1349
  qed (insert sa ksimplexD[OF sa(1)], auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1350
next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1351
  assume ?rs note rs=ksimplexD[OF this]
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1352
  guess a b by (rule ksimplex_extrema[OF `?rs`]) note ab = this
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1353
  def c \<equiv> "\<lambda>i. if i = (n + 1) then p - 1 else a i"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1354
  have "c \<notin> f"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1355
    apply (rule notI)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1356
    apply (drule assms(2)[rule_format])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1357
    unfolding c_def
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1358
    using assms(1)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1359
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1360
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1361
  thus ?ls
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1362
    apply (rule_tac x = "insert c f" in exI, rule_tac x = c in exI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1363
    unfolding ksimplex_def conj_assoc
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1364
    apply (rule conjI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1365
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1366
    apply (rule conjI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1367
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1368
    apply (rule conjI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1369
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1370
    apply (rule conjI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1371
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1372
  proof (rule_tac[3-5] ballI allI)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1373
    fix x j
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1374
    assume x: "x \<in> insert c f"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1375
    thus "x j \<le> p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1376
    proof (cases "x=c")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1377
      case True
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1378
      show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1379
        unfolding True c_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1380
        apply (cases "j=n+1")
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1381
        using ab(1) and rs(4)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1382
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1383
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1384
    qed (insert x rs(4), auto simp add:c_def)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1385
    show "j \<notin> {1..n + 1} \<longrightarrow> x j = p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1386
      apply (cases "x = c")
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1387
      using x ab(1) rs(5)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1388
      unfolding c_def
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1389
      apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1390
      done
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1391
    {
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1392
      fix z
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1393
      assume z: "z \<in> insert c f"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1394
      hence "kle (n + 1) c z"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1395
        apply (cases "z = c") (*defer apply(rule kle_Suc)*)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1396
      proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1397
        case False
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1398
        hence "z \<in> f" using z by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1399
        then guess k
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1400
          apply (drule_tac ab(3)[THEN bspec[where x=z], THEN conjunct1])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1401
          unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1402
          apply (erule exE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1403
          done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1404
        thus "kle (n + 1) c z"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1405
          unfolding kle_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1406
          apply (rule_tac x="insert (n + 1) k" in exI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1407
          unfolding c_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1408
          using ab
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1409
          using rs(5)[rule_format,OF ab(1),of "n + 1"] assms(1)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1410
          apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1411
          done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1412
        qed auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1413
    } note * = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1414
    fix y
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1415
    assume y: "y \<in> insert c f"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1416
    show "kle (n + 1) x y \<or> kle (n + 1) y x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1417
    proof (cases "x = c \<or> y = c")
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1418
      case False hence **: "x \<in> f" "y \<in> f" using x y by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1419
      show ?thesis using rs(6)[rule_format,OF **]
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1420
        by (auto dest: kle_Suc)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1421
    qed (insert * x y, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1422
  qed (insert rs, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1423
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1424
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1425
lemma ksimplex_fix_plane:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1426
  assumes "a \<in> s" "j\<in>{1..n::nat}" "\<forall>x\<in>s - {a}. x j = q" "a0 \<in> s" "a1 \<in> s"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1427
    "\<forall>i. a1 i = ((if i\<in>{1..n} then a0 i + 1 else a0 i)::nat)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1428
  shows "(a = a0) \<or> (a = a1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1429
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1430
  have *: "\<And>P A x y. \<forall>x\<in>A. P x \<Longrightarrow> x\<in>A \<Longrightarrow> y\<in>A \<Longrightarrow> P x \<and> P y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1431
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1432
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1433
    apply (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1434
    using *[OF assms(3), of a0 a1]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1435
    unfolding assms(6)[THEN spec[where x=j]]
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1436
    using assms(1-2,4-5)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1437
    apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1438
    done
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1439
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1440
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1441
lemma ksimplex_fix_plane_0:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1442
  assumes "a \<in> s" "j\<in>{1..n::nat}" "\<forall>x\<in>s - {a}. x j = 0" "a0 \<in> s" "a1 \<in> s"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1443
    "\<forall>i. a1 i = ((if i\<in>{1..n} then a0 i + 1 else a0 i)::nat)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1444
  shows "a = a1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1445
    apply (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1446
    using ksimplex_fix_plane[OF assms]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1447
    using assms(3)[THEN bspec[where x=a1]]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1448
    using assms(2,5)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1449
    unfolding assms(6)[THEN spec[where x=j]]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1450
    apply simp
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1451
    done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1452
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1453
lemma ksimplex_fix_plane_p:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1454
  assumes "ksimplex p n s" "a \<in> s" "j\<in>{1..n}" "\<forall>x\<in>s - {a}. x j = p" "a0 \<in> s" "a1 \<in> s"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1455
    "\<forall>i. a1 i = (if i\<in>{1..n} then a0 i + 1 else a0 i)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1456
  shows "a = a0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1457
proof (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1458
  note s = ksimplexD[OF assms(1),rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1459
  assume as: "a \<noteq> a0"
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1460
  then have *: "a0 \<in> s - {a}"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1461
    using assms(5) by auto
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1462
  then have "a1 = a"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1463
    using ksimplex_fix_plane[OF assms(2-)] by auto
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1464
  then show False
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1465
    using as and assms(3,5) and assms(7)[rule_format,of j]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1466
    unfolding assms(4)[rule_format,OF *]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1467
    using s(4)[OF assms(6), of j]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1468
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1469
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1470
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1471
lemma ksimplex_replace_0:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1472
  assumes "ksimplex p n s" "a \<in> s" "n \<noteq> 0" "j\<in>{1..n}" "\<forall>x\<in>s - {a}. x j = 0"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1473
  shows "card {s'. ksimplex p n s' \<and> (\<exists>b\<in>s'. s' - {b} = s - {a})} = 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1474
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1475
  have *: "\<And>s' a a'. s' - {a'} = s - {a} \<Longrightarrow> a' = a \<Longrightarrow> a' \<in> s' \<Longrightarrow> a \<in> s \<Longrightarrow> (s' = s)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1476
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1477
  have **: "\<And>s' a'. ksimplex p n s' \<Longrightarrow> a' \<in> s' \<Longrightarrow> s' - {a'} = s - {a} \<Longrightarrow> s' = s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1478
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1479
    case goal1
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1480
    guess a0 a1 by (rule ksimplex_extrema_strong[OF assms(1,3)]) note exta = this[rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1481
    have a:"a = a1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1482
      apply (rule ksimplex_fix_plane_0[OF assms(2,4-5)])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1483
      using exta(1-2,5)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1484
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1485
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1486
    moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1487
    guess b0 b1 by (rule ksimplex_extrema_strong[OF goal1(1) assms(3)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1488
    note extb = this[rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1489
    have a': "a' = b1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1490
      apply (rule ksimplex_fix_plane_0[OF goal1(2) assms(4), of b0])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1491
      unfolding goal1(3)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1492
      using assms extb goal1
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1493
      apply auto
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1494
      done
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1495
    moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1496
    have "b0 = a0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1497
      unfolding kle_antisym[symmetric, of b0 a0 n]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1498
      using exta extb and goal1(3)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1499
      unfolding a a' by blast
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1500
    hence "b1 = a1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1501
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1502
      apply (rule ext)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1503
      unfolding exta(5) extb(5)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1504
      apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1505
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1506
    ultimately
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1507
    show "s' = s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1508
      apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1509
      apply (rule *[of _ a1 b1])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1510
      using exta(1-2) extb(1-2) goal1
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1511
      apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1512
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1513
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1514
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1515
    unfolding card_1_exists
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1516
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1517
    apply(rule ex1I[of _ s])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1518
    unfolding mem_Collect_eq
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1519
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1520
    apply (erule conjE bexE)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1521
    apply (rule_tac a'=b in **)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1522
    using assms(1,2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  1523
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1524
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1525
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1526
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1527
lemma ksimplex_replace_1:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1528
  assumes "ksimplex p n s" "a \<in> s" "n \<noteq> 0" "j\<in>{1..n}" "\<forall>x\<in>s - {a}. x j = p"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1529
  shows "card {s'. ksimplex p n s' \<and> (\<exists>b\<in>s'. s' - {b} = s - {a})} = 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1530
proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1531
  have lem: "\<And>a a' s'. s' - {a'} = s - {a} \<Longrightarrow> a' = a \<Longrightarrow> a' \<in> s' \<Longrightarrow> a \<in> s \<Longrightarrow> s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1532
    by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1533
  have lem: "\<And>s' a'. ksimplex p n s' \<Longrightarrow> a'\<in>s' \<Longrightarrow> s' - {a'} = s - {a} \<Longrightarrow> s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1534
  proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1535
    case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1536
    guess a0 a1 by (rule ksimplex_extrema_strong[OF assms(1,3)]) note exta = this [rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1537
    have a: "a = a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1538
      apply (rule ksimplex_fix_plane_p[OF assms(1-2,4-5) exta(1,2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1539
      unfolding exta
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1540
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1541
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1542
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1543
    guess b0 b1 by (rule ksimplex_extrema_strong[OF goal1(1) assms(3)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1544
    note extb = this [rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1545
    have a': "a' = b0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1546
      apply (rule ksimplex_fix_plane_p[OF goal1(1-2) assms(4), of _ b1])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1547
      unfolding goal1 extb
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1548
      using extb(1,2) assms(5)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1549
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1550
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1551
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1552
    have *: "b1 = a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1553
      unfolding kle_antisym[symmetric, of b1 a1 n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1554
      using exta extb
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1555
      using goal1(3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1556
      unfolding a a'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1557
      by blast
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1558
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1559
    have "a0 = b0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1560
      apply (rule ext)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1561
    proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1562
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1563
      show "a0 x = b0 x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1564
        using *[THEN cong, of x x]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1565
        unfolding exta extb
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1566
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1567
        apply (cases "x \<in> {1..n}")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1568
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1569
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1570
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1571
    ultimately
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1572
    show "s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1573
      apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1574
      apply (rule lem[OF goal1(3) _ goal1(2) assms(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1575
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1576
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1577
  qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1578
  show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1579
    unfolding card_1_exists
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1580
    apply (rule ex1I[of _ s])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1581
    unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1582
    apply (rule, rule assms(1))
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1583
    apply (rule_tac x = a in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1584
    prefer 3
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1585
    apply (erule conjE bexE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1586
    apply (rule_tac a'=b in lem)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1587
    using assms(1-2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1588
    apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1589
    done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1590
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1591
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1592
lemma ksimplex_replace_2:
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1593
  assumes "ksimplex p n s" "a \<in> s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1594
    "n \<noteq> 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1595
    "~(\<exists>j\<in>{1..n}. \<forall>x\<in>s - {a}. x j = 0)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1596
    "~(\<exists>j\<in>{1..n}. \<forall>x\<in>s - {a}. x j = p)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1597
  shows "card {s'. ksimplex p n s' \<and> (\<exists>b\<in>s'. s' - {b} = s - {a})} = 2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1598
  (is "card ?A = 2")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1599
proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1600
  have lem1: "\<And>a a' s s'. s' - {a'} = s - {a} \<Longrightarrow> a' = a \<Longrightarrow> a' \<in> s' \<Longrightarrow> a \<in> s \<Longrightarrow> s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1601
    by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1602
  have lem2: "\<And>a b. a\<in>s \<Longrightarrow> b\<noteq>a \<Longrightarrow> s \<noteq> insert b (s - {a})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1603
  proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1604
    case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1605
    hence "a \<in> insert b (s - {a})" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1606
    hence "a \<in> s - {a}" unfolding insert_iff using goal1 by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1607
    thus False by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1608
  qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1609
  guess a0 a1 by (rule ksimplex_extrema_strong[OF assms(1,3)]) note a0a1 = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1610
  {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1611
    assume "a = a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1612
    have *: "\<And>P Q. (P \<or> Q) \<Longrightarrow> \<not> P \<Longrightarrow> Q" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1613
    have "\<exists>x\<in>s. \<not> kle n x a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1614
      apply (rule_tac x=a1 in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1615
    proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1616
      assume as: "kle n a1 a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1617
      show False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1618
        using kle_imp_pointwise[OF as,THEN spec[where x=1]]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1619
        unfolding a0a1(5)[THEN spec[where x=1]]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1620
        using assms(3) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1621
    qed (insert a0a1, auto)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1622
    hence "\<exists>y\<in>s. \<exists>k\<in>{1..n}. \<forall>j. y j = (if j = k then a0 j + 1 else a0 j)"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1623
      apply (rule_tac *[OF ksimplex_successor[OF assms(1-2),unfolded `a=a0`]])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1624
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1625
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1626
    then guess a2 ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1627
    from this(2) guess k .. note k = this note a2 =`a2 \<in> s`
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1628
    def a3 \<equiv> "\<lambda>j. if j = k then a1 j + 1 else a1 j"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1629
    have "a3 \<notin> s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1630
    proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1631
      assume "a3\<in>s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1632
      hence "kle n a3 a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1633
      using a0a1(4) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1634
      thus False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1635
        apply (drule_tac kle_imp_pointwise) unfolding a3_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1636
        apply (erule_tac x = k in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1637
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1638
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1639
    qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1640
    hence "a3 \<noteq> a0" "a3 \<noteq> a1" using a0a1 by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1641
    have "a2 \<noteq> a0" using k(2)[THEN spec[where x=k]] by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1642
    have lem3: "\<And>x. x\<in>(s - {a0}) \<Longrightarrow> kle n a2 x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1643
    proof (rule ccontr)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1644
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1645
      hence as: "x\<in>s" "x\<noteq>a0" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1646
      have "kle n a2 x \<or> kle n x a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1647
        using ksimplexD(6)[OF assms(1)] and as `a2\<in>s` by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1648
      moreover
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1649
      have "kle n a0 x" using a0a1(4) as by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1650
      ultimately have "x = a0 \<or> x = a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1651
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1652
        apply (rule kle_adjacent[OF k(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1653
        using goal1(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1654
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1655
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1656
      hence "x = a2" using as by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1657
      thus False using goal1(2) using kle_refl by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1658
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1659
    let ?s = "insert a3 (s - {a0})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1660
    have "ksimplex p n ?s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1661
      apply (rule ksimplexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1662
    proof (rule_tac[2-] ballI,rule_tac[4] ballI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1663
      show "card ?s = n + 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1664
        using ksimplexD(2-3)[OF assms(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1665
        using `a3\<noteq>a0` `a3\<notin>s` `a0\<in>s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1666
        by (auto simp add:card_insert_if)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1667
      fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1668
      assume x: "x \<in> insert a3 (s - {a0})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1669
      show "\<forall>j. x j \<le> p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1670
      proof (rule, cases "x = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1671
        fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1672
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1673
        thus "x j\<le>p" using x ksimplexD(4)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1674
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1675
        fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1676
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1677
        show "x j\<le>p" unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1678
        proof (cases "j = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1679
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1680
          thus "a3 j \<le>p" unfolding True a3_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1681
          using `a1\<in>s` ksimplexD(4)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1682
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1683
          guess a4 using assms(5)[unfolded bex_simps ball_simps,rule_format,OF k(1)] ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1684
          note a4 = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1685
          have "a2 k \<le> a4 k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1686
            using lem3[OF a4(1)[unfolded `a=a0`],THEN kle_imp_pointwise] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1687
          also have "\<dots> < p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1688
            using ksimplexD(4)[OF assms(1),rule_format,of a4 k] using a4 by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1689
          finally have *:"a0 k + 1 < p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1690
            unfolding k(2)[rule_format] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1691
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1692
          thus "a3 j \<le>p" unfolding a3_def unfolding a0a1(5)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1693
            using k(1) k(2)assms(5) using * by simp
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1694
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1695
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1696
      show "\<forall>j. j \<notin> {1..n} \<longrightarrow> x j = p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1697
      proof (rule, rule, cases "x=a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1698
        fix j :: nat
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1699
        assume j: "j \<notin> {1..n}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1700
        {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1701
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1702
          thus "x j = p" using j x ksimplexD(5)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1703
        }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1704
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1705
        show "x j = p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1706
          unfolding True a3_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1707
          using j k(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1708
          using ksimplexD(5)[OF assms(1),rule_format,OF `a1\<in>s` j] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1709
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1710
      fix y
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1711
      assume y: "y \<in> insert a3 (s - {a0})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1712
      have lem4: "\<And>x. x\<in>s \<Longrightarrow> x\<noteq>a0 \<Longrightarrow> kle n x a3"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1713
      proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1714
        case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1715
        guess kk using a0a1(4)[rule_format, OF `x\<in>s`,THEN conjunct2,unfolded kle_def]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1716
          by (elim exE conjE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1717
        note kk = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1718
        have "k \<notin> kk"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1719
        proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1720
          assume "k \<in> kk"
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1721
          hence "a1 k = x k + 1" using kk by auto
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1722
          hence "a0 k = x k" unfolding a0a1(5)[rule_format] using k(1) by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1723
          hence "a2 k = x k + 1" unfolding k(2)[rule_format] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1724
          moreover
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  1725
          have "a2 k \<le> x k" using lem3[of x,THEN kle_imp_pointwise] goal1 by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1726
          ultimately show False by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1727
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1728
        thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1729
          unfolding kle_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1730
          apply (rule_tac x="insert k kk" in exI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1731
          using kk(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1732
          unfolding a3_def kle_def kk(2)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1733
          using k(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1734
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1735
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1736
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1737
      show "kle n x y \<or> kle n y x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1738
      proof (cases "y = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1739
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1740
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1741
          unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1742
          apply (cases "x = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1743
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1744
          apply (rule disjI1, rule lem4)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1745
          using x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1746
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1747
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1748
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1749
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1750
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1751
        proof (cases "x = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1752
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1753
          show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1754
            unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1755
            apply (rule disjI2, rule lem4)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1756
            using y False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1757
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1758
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1759
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1760
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1761
          thus ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1762
            apply (rule_tac ksimplexD(6)[OF assms(1),rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1763
            using x y `y \<noteq> a3`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1764
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1765
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1766
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1767
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1768
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1769
    hence "insert a3 (s - {a0}) \<in> ?A"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1770
      unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1771
      apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1772
      apply (rule, assumption)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1773
      apply (rule_tac x = "a3" in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1774
      unfolding `a = a0`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1775
      using `a3 \<notin> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1776
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1777
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1778
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1779
    have "s \<in> ?A" using assms(1,2) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1780
    ultimately have  "?A \<supseteq> {s, insert a3 (s - {a0})}" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1781
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1782
    have "?A \<subseteq> {s, insert a3 (s - {a0})}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1783
      apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1784
      unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1785
    proof (erule conjE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1786
      fix s'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1787
      assume as: "ksimplex p n s'" and "\<exists>b\<in>s'. s' - {b} = s - {a}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1788
      from this(2) guess a' .. note a' = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1789
      guess a_min a_max by (rule ksimplex_extrema_strong[OF as assms(3)]) note min_max = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1790
      have *: "\<forall>x\<in>s' - {a'}. x k = a2 k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1791
        unfolding a'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1792
      proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1793
        fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1794
        assume x: "x \<in> s - {a}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1795
        hence "kle n a2 x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1796
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1797
          apply (rule lem3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1798
          using `a = a0`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1799
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1800
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1801
        hence "a2 k \<le> x k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1802
          apply (drule_tac kle_imp_pointwise)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1803
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1804
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1805
        moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1806
        have "x k \<le> a2 k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1807
          unfolding k(2)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1808
          using a0a1(4)[rule_format,of x, THEN conjunct1]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1809
          unfolding kle_def using x by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1810
        ultimately show "x k = a2 k" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1811
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1812
      have **: "a' = a_min \<or> a' = a_max"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1813
        apply (rule ksimplex_fix_plane[OF a'(1) k(1) *])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1814
        using min_max
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1815
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1816
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1817
      show "s' \<in> {s, insert a3 (s - {a0})}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1818
      proof (cases "a' = a_min")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1819
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1820
        have "a_max = a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1821
          unfolding kle_antisym[symmetric,of a_max a1 n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1822
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1823
          apply (rule a0a1(4)[rule_format,THEN conjunct2])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1824
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1825
        proof (rule min_max(4)[rule_format,THEN conjunct2])
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1826
          show "a1\<in>s'" using a' unfolding `a=a0` using a0a1 by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1827
          show "a_max \<in> s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1828
          proof (rule ccontr)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1829
            assume "a_max \<notin> s"
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1830
            hence "a_max = a'" using a' min_max by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1831
            thus False unfolding True using min_max by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1832
          qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1833
        qed
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1834
        hence "\<forall>i. a_max i = a1 i" by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1835
        hence "a' = a" unfolding True `a = a0`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1836
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1837
          apply (subst fun_eq_iff, rule)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1838
          apply (erule_tac x=x in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1839
          unfolding a0a1(5)[rule_format] min_max(5)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1840
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1841
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1842
          thus ?case by (cases "x\<in>{1..n}") auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1843
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1844
        hence "s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1845
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1846
          apply (rule lem1[OF a'(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1847
          using `a\<in>s` `a'\<in>s'`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1848
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1849
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1850
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1851
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1852
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1853
        hence as:"a' = a_max" using ** by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1854
        have "a_min = a2" unfolding kle_antisym[symmetric, of _ _ n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1855
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1856
          apply (rule min_max(4)[rule_format,THEN conjunct1])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1857
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1858
        proof (rule lem3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1859
          show "a_min \<in> s - {a0}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1860
            unfolding a'(2)[symmetric,unfolded `a = a0`]
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1861
            unfolding as using min_max(1-3) by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1862
          have "a2 \<noteq> a"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1863
            unfolding `a = a0` using k(2)[rule_format,of k] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1864
          hence "a2 \<in> s - {a}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1865
            using a2 by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1866
          thus "a2 \<in> s'" unfolding a'(2)[symmetric] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1867
        qed
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  1868
        hence "\<forall>i. a_min i = a2 i" by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1869
        hence "a' = a3"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1870
          unfolding as `a = a0`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1871
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1872
          apply (subst fun_eq_iff, rule)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1873
          apply (erule_tac x=x in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1874
          unfolding a0a1(5)[rule_format] min_max(5)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1875
          unfolding a3_def k(2)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1876
          unfolding a0a1(5)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1877
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1878
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1879
          show ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1880
            unfolding goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1881
            apply (cases "x\<in>{1..n}")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1882
            defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1883
            apply (cases "x = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1884
            using `k\<in>{1..n}`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1885
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1886
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1887
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1888
        hence "s' = insert a3 (s - {a0})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1889
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1890
          apply (rule lem1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1891
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1892
          apply assumption
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1893
          apply (rule a'(1))
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1894
          unfolding a' `a = a0`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1895
          using `a3 \<notin> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1896
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1897
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1898
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1899
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1900
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1901
    ultimately have *: "?A = {s, insert a3 (s - {a0})}" by blast
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1902
    have "s \<noteq> insert a3 (s - {a0})" using `a3\<notin>s` by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1903
    hence ?thesis unfolding * by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1904
  }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1905
  moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1906
  {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1907
    assume "a = a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1908
    have *: "\<And>P Q. (P \<or> Q) \<Longrightarrow> \<not> P \<Longrightarrow> Q" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1909
    have "\<exists>x\<in>s. \<not> kle n a1 x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1910
      apply (rule_tac x=a0 in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1911
    proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1912
      assume as: "kle n a1 a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1913
      show False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1914
        using kle_imp_pointwise[OF as,THEN spec[where x=1]]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1915
        unfolding a0a1(5)[THEN spec[where x=1]]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1916
        using assms(3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1917
        by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1918
    qed (insert a0a1, auto)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1919
    hence "\<exists>y\<in>s. \<exists>k\<in>{1..n}. \<forall>j. a1 j = (if j = k then y j + 1 else y j)"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1920
      apply (rule_tac *[OF ksimplex_predecessor[OF assms(1-2),unfolded `a=a1`]])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1921
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1922
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1923
    then guess a2 .. from this(2) guess k .. note k=this note a2 = `a2 \<in> s`
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1924
    def a3 \<equiv> "\<lambda>j. if j = k then a0 j - 1 else a0 j"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1925
    have "a2 \<noteq> a1" using k(2)[THEN spec[where x=k]] by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1926
    have lem3: "\<And>x. x\<in>(s - {a1}) \<Longrightarrow> kle n x a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1927
    proof (rule ccontr)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1928
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1929
      hence as: "x\<in>s" "x\<noteq>a1" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1930
      have "kle n a2 x \<or> kle n x a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1931
        using ksimplexD(6)[OF assms(1)] and as `a2\<in>s` by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1932
      moreover
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1933
      have "kle n x a1" using a0a1(4) as by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1934
      ultimately have "x = a2 \<or> x = a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1935
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1936
        apply (rule kle_adjacent[OF k(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1937
        using goal1(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1938
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1939
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1940
      hence "x = a2" using as by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1941
      thus False using goal1(2) using kle_refl by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1942
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1943
    have "a0 k \<noteq> 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1944
    proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1945
      guess a4 using assms(4)[unfolded bex_simps ball_simps,rule_format,OF `k\<in>{1..n}`] ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1946
      note a4 = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1947
      have "a4 k \<le> a2 k" using lem3[OF a4(1)[unfolded `a=a1`],THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1948
        by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1949
      moreover have "a4 k > 0" using a4 by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1950
      ultimately have "a2 k > 0" by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1951
      hence "a1 k > 1" unfolding k(2)[rule_format] by simp
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1952
      thus ?thesis unfolding a0a1(5)[rule_format] using k(1) by simp
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1953
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1954
    hence lem4: "\<forall>j. a0 j = (if j=k then a3 j + 1 else a3 j)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1955
      unfolding a3_def by simp
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1956
    have "\<not> kle n a0 a3"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1957
      apply (rule ccontr)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1958
      unfolding not_not
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1959
      apply (drule kle_imp_pointwise)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1960
      unfolding lem4[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1961
      apply (erule_tac x=k in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1962
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1963
      done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1964
    hence "a3 \<notin> s" using a0a1(4) by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1965
    hence "a3 \<noteq> a1" "a3 \<noteq> a0" using a0a1 by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1966
    let ?s = "insert a3 (s - {a1})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1967
    have "ksimplex p n ?s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1968
      apply (rule ksimplexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1969
    proof (rule_tac[2-] ballI,rule_tac[4] ballI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1970
      show "card ?s = n+1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1971
        using ksimplexD(2-3)[OF assms(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1972
        using `a3\<noteq>a0` `a3\<notin>s` `a1\<in>s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1973
        by(auto simp add:card_insert_if)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1974
      fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1975
      assume x: "x \<in> insert a3 (s - {a1})"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  1976
      show "\<forall>j. x j \<le> p" proof(rule,cases "x = a3")
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1977
        fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1978
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1979
        thus "x j\<le>p" using x ksimplexD(4)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1980
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1981
        fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1982
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1983
        show "x j\<le>p" unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1984
        proof (cases "j = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1985
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1986
          thus "a3 j \<le>p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1987
            unfolding True a3_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1988
            using `a0\<in>s` ksimplexD(4)[OF assms(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1989
            by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1990
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1991
          guess a4 using assms(5)[unfolded bex_simps ball_simps,rule_format,OF k(1)] ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1992
          note a4 = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1993
          case True have "a3 k \<le> a0 k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1994
            unfolding lem4[rule_format] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1995
          also have "\<dots> \<le> p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1996
            using ksimplexD(4)[OF assms(1),rule_format,of a0 k] a0a1 by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1997
          finally show "a3 j \<le> p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1998
            unfolding True by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  1999
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2000
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2001
      show "\<forall>j. j \<notin> {1..n} \<longrightarrow> x j = p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2002
      proof (rule, rule, cases "x = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2003
        fix j :: nat
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2004
        assume j: "j \<notin> {1..n}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2005
        {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2006
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2007
          thus "x j = p" using j x ksimplexD(5)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2008
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2009
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2010
          show "x j = p" unfolding True a3_def using j k(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2011
            using ksimplexD(5)[OF assms(1),rule_format,OF `a0\<in>s` j] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2012
        }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2013
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2014
      fix y
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2015
      assume y: "y\<in>insert a3 (s - {a1})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2016
      have lem4: "\<And>x. x\<in>s \<Longrightarrow> x \<noteq> a1 \<Longrightarrow> kle n a3 x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2017
      proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2018
        case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2019
        hence *: "x\<in>s - {a1}" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2020
        have "kle n a3 a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2021
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2022
          have "kle n a0 a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2023
            using a0a1 by auto then guess kk unfolding kle_def ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2024
          thus ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2025
            unfolding kle_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2026
            apply (rule_tac x=kk in exI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2027
            unfolding lem4[rule_format] k(2)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2028
            apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2029
            defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2030
          proof rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2031
            case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2032
            thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2033
              apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2034
              apply (erule conjE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2035
              apply (erule_tac[!] x=j in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2036
              apply (cases "j \<in> kk")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2037
              apply (case_tac[!] "j=k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2038
              apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2039
              done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2040
          qed auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2041
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2042
        moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2043
        have "kle n a3 a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2044
          unfolding kle_def lem4[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2045
          apply (rule_tac x="{k}" in exI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2046
          using k(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2047
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2048
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2049
        ultimately
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2050
        show ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2051
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2052
          apply (rule kle_between_l[of _ a0 _ a2])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2053
          using lem3[OF *]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2054
          using a0a1(4)[rule_format,OF goal1(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2055
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2056
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2057
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2058
      show "kle n x y \<or> kle n y x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2059
      proof (cases "y = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2060
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2061
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2062
          unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2063
          apply (cases "x = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2064
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2065
          apply (rule disjI2, rule lem4)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2066
          using x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2067
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2068
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2069
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2070
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2071
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2072
        proof (cases "x = a3")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2073
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2074
          show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2075
            unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2076
            apply (rule disjI1, rule lem4)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2077
            using y False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2078
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2079
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2080
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2081
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2082
          thus ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2083
            apply (rule_tac ksimplexD(6)[OF assms(1),rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2084
            using x y `y\<noteq>a3`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2085
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2086
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2087
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2088
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2089
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2090
    hence "insert a3 (s - {a1}) \<in> ?A"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2091
      unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2092
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2093
        apply (rule, assumption)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2094
        apply (rule_tac x = "a3" in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2095
        unfolding `a = a1`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2096
        using `a3 \<notin> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2097
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2098
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2099
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2100
    have "s \<in> ?A" using assms(1,2) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2101
    ultimately have "?A \<supseteq> {s, insert a3 (s - {a1})}" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2102
    moreover have "?A \<subseteq> {s, insert a3 (s - {a1})}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2103
      apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2104
      unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2105
    proof (erule conjE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2106
      fix s'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2107
      assume as: "ksimplex p n s'" and "\<exists>b\<in>s'. s' - {b} = s - {a}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2108
      from this(2) guess a' .. note a' = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2109
      guess a_min a_max by (rule ksimplex_extrema_strong[OF as assms(3)]) note min_max = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2110
      have *: "\<forall>x\<in>s' - {a'}. x k = a2 k" unfolding a'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2111
      proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2112
        fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2113
        assume x: "x \<in> s - {a}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2114
        hence "kle n x a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2115
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2116
          apply (rule lem3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2117
          using `a = a1`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2118
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2119
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2120
        hence "x k \<le> a2 k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2121
          apply (drule_tac kle_imp_pointwise)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2122
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2123
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2124
        moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2125
        {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2126
          have "a2 k \<le> a0 k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2127
            using k(2)[rule_format,of k]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2128
            unfolding a0a1(5)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2129
            using k(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2130
            by simp
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2131
          also have "\<dots> \<le> x k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2132
            using a0a1(4)[rule_format,of x,THEN conjunct1,THEN kle_imp_pointwise] x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2133
            by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2134
          finally have "a2 k \<le> x k" .
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2135
        }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2136
        ultimately show "x k = a2 k" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2137
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2138
      have **: "a' = a_min \<or> a' = a_max"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2139
        apply (rule ksimplex_fix_plane[OF a'(1) k(1) *])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2140
        using min_max
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2141
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2142
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2143
      have "a2 \<noteq> a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2144
      proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2145
        assume as: "a2 = a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2146
        show False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2147
          using k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2148
          unfolding as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2149
          apply (erule_tac x = k in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2150
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2151
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2152
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2153
      hence a2': "a2 \<in> s' - {a'}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2154
        unfolding a'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2155
        using a2
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2156
        unfolding `a = a1`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2157
        by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2158
      show "s' \<in> {s, insert a3 (s - {a1})}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2159
      proof (cases "a' = a_min")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2160
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2161
        have "a_max \<in> s - {a1}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2162
          using min_max
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2163
          unfolding a'(2)[unfolded `a=a1`,symmetric] True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2164
          by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2165
        hence "a_max = a2"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2166
          unfolding kle_antisym[symmetric,of a_max a2 n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2167
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2168
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2169
          apply (rule lem3,assumption)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2170
          apply (rule min_max(4)[rule_format,THEN conjunct2])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2171
          using a2'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2172
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2173
          done
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  2174
        hence a_max:"\<forall>i. a_max i = a2 i" by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2175
        have *: "\<forall>j. a2 j = (if j\<in>{1..n} then a3 j + 1 else a3 j)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2176
          using k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2177
          unfolding lem4[rule_format] a0a1(5)[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2178
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2179
          apply (rule,erule_tac x=j in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2180
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2181
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2182
          thus ?case by (cases "j\<in>{1..n}",case_tac[!] "j=k") auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2183
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2184
        have "\<forall>i. a_min i = a3 i"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2185
          using a_max
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2186
            apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2187
            apply (rule,erule_tac x=i in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2188
            unfolding min_max(5)[rule_format] *[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2189
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2190
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2191
          thus ?case by (cases "i\<in>{1..n}") auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2192
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2193
        hence "a_min = a3" unfolding fun_eq_iff .
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2194
        hence "s' = insert a3 (s - {a1})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2195
          using a' unfolding `a = a1` True by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2196
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2197
      next
41958
5abc60a017e0 eliminated hard tabs;
wenzelm
parents: 39302
diff changeset
  2198
        case False hence as:"a'=a_max" using ** by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2199
        have "a_min = a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2200
          unfolding kle_antisym[symmetric,of _ _ n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2201
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2202
          apply (rule min_max(4)[rule_format,THEN conjunct1])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2203
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2204
          apply (rule a0a1(4)[rule_format,THEN conjunct1])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2205
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2206
          have "a_min \<in> s - {a1}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2207
            using min_max(1,3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2208
            unfolding a'(2)[symmetric,unfolded `a=a1`] as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2209
            by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2210
          thus "a_min \<in> s" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2211
          have "a0 \<in> s - {a1}" using a0a1(1-3) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2212
          thus "a0 \<in> s'" unfolding a'(2)[symmetric,unfolded `a=a1`] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2213
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2214
        hence "\<forall>i. a_max i = a1 i"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2215
          unfolding a0a1(5)[rule_format] min_max(5)[rule_format] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2216
        hence "s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2217
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2218
          apply (rule lem1[OF a'(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2219
          using `a \<in> s` `a' \<in> s'`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2220
          unfolding as `a = a1`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2221
          unfolding fun_eq_iff
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2222
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2223
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2224
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2225
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2226
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2227
    ultimately have *: "?A = {s, insert a3 (s - {a1})}" by blast
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2228
    have "s \<noteq> insert a3 (s - {a1})" using `a3\<notin>s` by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2229
    hence ?thesis unfolding * by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2230
  }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2231
  moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2232
  {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2233
    assume as: "a \<noteq> a0" "a \<noteq> a1" have "\<not> (\<forall>x\<in>s. kle n a x)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2234
    proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2235
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2236
      have "a = a0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2237
        unfolding kle_antisym[symmetric,of _ _ n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2238
        apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2239
        using goal1 a0a1 assms(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2240
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2241
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2242
      thus False using as by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2243
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2244
    hence "\<exists>y\<in>s. \<exists>k\<in>{1..n}. \<forall>j. a j = (if j = k then y j + 1 else y j)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2245
      using ksimplex_predecessor[OF assms(1-2)] by blast
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2246
    then guess u .. from this(2) guess k .. note k = this[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2247
    note u = `u \<in> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2248
    have "\<not> (\<forall>x\<in>s. kle n x a)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2249
    proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2250
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2251
      have "a = a1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2252
        unfolding kle_antisym[symmetric,of _ _ n]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2253
        apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2254
        using goal1 a0a1 assms(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2255
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2256
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2257
      thus False using as by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2258
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2259
    hence "\<exists>y\<in>s. \<exists>k\<in>{1..n}. \<forall>j. y j = (if j = k then a j + 1 else a j)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2260
      using ksimplex_successor[OF assms(1-2)] by blast
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2261
    then guess v .. from this(2) guess l ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2262
    note l = this[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2263
    note v = `v\<in>s`
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2264
    def a' \<equiv> "\<lambda>j. if j = l then u j + 1 else u j"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2265
    have kl: "k \<noteq> l"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2266
    proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2267
      assume "k = l"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2268
      have *: "\<And>P. (if P then (1::nat) else 0) \<noteq> 2" by auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2269
      thus False using ksimplexD(6)[OF assms(1),rule_format,OF u v] unfolding kle_def
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2270
        unfolding l(2) k(2) `k = l`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2271
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2272
        apply (erule disjE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2273
        apply (erule_tac[!] exE conjE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2274
        apply (erule_tac[!] x = l in allE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2275
        apply (auto simp add: *)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2276
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2277
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2278
    hence aa': "a' \<noteq> a"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2279
      apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2280
      apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2281
      unfolding fun_eq_iff
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2282
      unfolding a'_def k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2283
      apply (erule_tac x=l in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2284
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2285
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2286
    have "a' \<notin> s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2287
      apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2288
      apply (drule ksimplexD(6)[OF assms(1),rule_format,OF `a\<in>s`])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2289
    proof (cases "kle n a a'")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2290
      case goal2
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2291
      hence "kle n a' a" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2292
      thus False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2293
        apply (drule_tac kle_imp_pointwise)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2294
        apply (erule_tac x=l in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2295
        unfolding a'_def k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2296
        using kl
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2297
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2298
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2299
    next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2300
      case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2301
      thus False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2302
        apply (drule_tac kle_imp_pointwise)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2303
        apply (erule_tac x=k in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2304
        unfolding a'_def k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2305
        using kl
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2306
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2307
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2308
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2309
    have kle_uv: "kle n u a" "kle n u a'" "kle n a v" "kle n a' v"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2310
      unfolding kle_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2311
      apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2312
      apply (rule_tac[1] x="{k}" in exI,rule_tac[2] x="{l}" in exI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2313
      apply (rule_tac[3] x="{l}" in exI,rule_tac[4] x="{k}" in exI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2314
      unfolding l(2) k(2) a'_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2315
      using l(1) k(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2316
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2317
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2318
    have uxv: "\<And>x. kle n u x \<Longrightarrow> kle n x v \<Longrightarrow> x = u \<or> x = a \<or> x = a' \<or> x = v"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2319
    proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2320
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2321
      thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2322
      proof (cases "x k = u k", case_tac[!] "x l = u l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2323
        assume as: "x l = u l" "x k = u k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2324
        have "x = u" unfolding fun_eq_iff
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2325
          using goal1(2)[THEN kle_imp_pointwise,unfolded l(2)] unfolding k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2326
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2327
          using goal1(1)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2328
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2329
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2330
          apply (erule_tac x=xa in allE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2331
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2332
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2333
          thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2334
            apply (cases "x = l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2335
            apply (case_tac[!] "x = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2336
            using as by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2337
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2338
        thus ?case by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2339
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2340
        assume as: "x l \<noteq> u l" "x k = u k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2341
        have "x = a'"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2342
          unfolding fun_eq_iff
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2343
          unfolding a'_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2344
          using goal1(2)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2345
          unfolding l(2) k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2346
          using goal1(1)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2347
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2348
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2349
          apply (erule_tac x = xa in allE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2350
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2351
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2352
          thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2353
            apply (cases "x = l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2354
            apply (case_tac[!] "x = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2355
            using as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2356
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2357
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2358
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2359
        thus ?case by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2360
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2361
        assume as: "x l = u l" "x k \<noteq> u k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2362
        have "x = a"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2363
          unfolding fun_eq_iff
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2364
          using goal1(2)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2365
          unfolding l(2) k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2366
          using goal1(1)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2367
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2368
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2369
          apply (erule_tac x=xa in allE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2370
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2371
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2372
          thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2373
            apply (cases "x = l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2374
            apply (case_tac[!] "x = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2375
            using as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2376
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2377
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2378
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2379
        thus ?case by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2380
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2381
        assume as: "x l \<noteq> u l" "x k \<noteq> u k"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2382
        have "x = v"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2383
          unfolding fun_eq_iff
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2384
          using goal1(2)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2385
          unfolding l(2) k(2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2386
          using goal1(1)[THEN kle_imp_pointwise]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2387
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2388
          apply rule
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2389
          apply (erule_tac x=xa in allE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2390
        proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2391
          case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2392
          thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2393
            apply (cases "x = l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2394
            apply (case_tac[!] "x = k")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2395
            using as `k \<noteq> l`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2396
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2397
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2398
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2399
        thus ?case by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2400
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2401
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2402
    have uv: "kle n u v"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2403
      apply (rule kle_trans[OF kle_uv(1,3)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2404
      using ksimplexD(6)[OF assms(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2405
      using u v
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2406
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2407
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2408
    have lem3: "\<And>x. x \<in> s \<Longrightarrow> kle n v x \<Longrightarrow> kle n a' x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2409
      apply (rule kle_between_r[of _ u _ v])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2410
      prefer 3
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2411
      apply (rule kle_trans[OF uv])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2412
      defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2413
      apply (rule ksimplexD(6)[OF assms(1), rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2414
      using kle_uv `u\<in>s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2415
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2416
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2417
    have lem4: "\<And>x. x\<in>s \<Longrightarrow> kle n x u \<Longrightarrow> kle n x a'"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2418
      apply (rule kle_between_l[of _ u _ v])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2419
      prefer 4
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2420
      apply (rule kle_trans[OF _ uv])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2421
      defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2422
      apply (rule ksimplexD(6)[OF assms(1), rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2423
      using kle_uv `v\<in>s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2424
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2425
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2426
    have lem5: "\<And>x. x \<in> s \<Longrightarrow> x \<noteq> a \<Longrightarrow> kle n x a' \<or> kle n a' x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2427
    proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2428
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2429
      thus ?case
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2430
      proof (cases "kle n v x \<or> kle n x u")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2431
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2432
        thus ?thesis using goal1 by(auto intro:lem3 lem4)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2433
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2434
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2435
        hence *: "kle n u x" "kle n x v"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2436
          using ksimplexD(6)[OF assms(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2437
          using goal1 `u\<in>s` `v\<in>s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2438
          by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2439
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2440
          using uxv[OF *]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2441
          using kle_uv
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2442
          using goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2443
          by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2444
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2445
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2446
    have "ksimplex p n (insert a' (s - {a}))"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2447
      apply (rule ksimplexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2448
    proof (rule_tac[2-] ballI, rule_tac[4] ballI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2449
      show "card (insert a' (s - {a})) = n + 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2450
        using ksimplexD(2-3)[OF assms(1)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2451
        using `a' \<noteq> a` `a' \<notin> s` `a \<in> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2452
        by (auto simp add:card_insert_if)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2453
      fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2454
      assume x: "x \<in> insert a' (s - {a})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2455
      show "\<forall>j. x j \<le> p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2456
      proof (rule, cases "x = a'")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2457
        fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2458
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2459
        thus "x j\<le>p" using x ksimplexD(4)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2460
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2461
        fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2462
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2463
        show "x j\<le>p" unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2464
        proof (cases "j = l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2465
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2466
          thus "a' j \<le>p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2467
            unfolding True a'_def using `u\<in>s` ksimplexD(4)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2468
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2469
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2470
          have *: "a l = u l" "v l = a l + 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2471
            using k(2)[of l] l(2)[of l] `k\<noteq>l` by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2472
          have "u l + 1 \<le> p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2473
            unfolding *[symmetric] using ksimplexD(4)[OF assms(1)] using `v\<in>s` by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2474
          thus "a' j \<le>p" unfolding a'_def True by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2475
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2476
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2477
      show "\<forall>j. j \<notin> {1..n} \<longrightarrow> x j = p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2478
      proof (rule, rule,cases "x = a'")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2479
        fix j :: nat
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2480
        assume j: "j \<notin> {1..n}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2481
        {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2482
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2483
          thus "x j = p" using j x ksimplexD(5)[OF assms(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2484
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2485
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2486
          show "x j = p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2487
            unfolding True a'_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2488
            using j l(1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2489
            using ksimplexD(5)[OF assms(1),rule_format,OF `u\<in>s` j]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2490
            by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2491
        }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2492
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2493
      fix y
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2494
      assume y: "y\<in>insert a' (s - {a})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2495
      show "kle n x y \<or> kle n y x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2496
      proof (cases "y = a'")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2497
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2498
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2499
          unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2500
          apply (cases "x = a'")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2501
          defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2502
          apply (rule lem5)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2503
          using x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2504
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2505
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2506
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2507
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2508
        show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2509
        proof (cases "x = a'")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2510
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2511
          show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2512
            unfolding True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2513
            using lem5[of y] using y by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2514
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2515
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2516
          thus ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2517
            apply (rule_tac ksimplexD(6)[OF assms(1),rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2518
            using x y `y\<noteq>a'`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2519
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2520
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2521
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2522
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2523
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2524
    hence "insert a' (s - {a}) \<in> ?A"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2525
      unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2526
      apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2527
      apply (rule, assumption)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2528
      apply (rule_tac x = "a'" in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2529
      using aa' `a' \<notin> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2530
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2531
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2532
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2533
    have "s \<in> ?A" using assms(1,2) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2534
    ultimately have  "?A \<supseteq> {s, insert a' (s - {a})}" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2535
    moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2536
    have "?A \<subseteq> {s, insert a' (s - {a})}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2537
      apply rule unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2538
    proof (erule conjE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2539
      fix s'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2540
      assume as: "ksimplex p n s'" and "\<exists>b\<in>s'. s' - {b} = s - {a}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2541
      from this(2) guess a'' .. note a'' = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2542
      have "u \<noteq> v" unfolding fun_eq_iff unfolding l(2) k(2) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2543
      hence uv': "\<not> kle n v u" using uv using kle_antisym by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2544
      have "u \<noteq> a" "v \<noteq> a" unfolding fun_eq_iff k(2) l(2) by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2545
      hence uvs': "u \<in> s'" "v \<in> s'" using `u \<in> s` `v \<in> s` using a'' by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2546
      have lem6: "a \<in> s' \<or> a' \<in> s'"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2547
      proof (cases "\<forall>x\<in>s'. kle n x u \<or> kle n v x")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2548
        case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2549
        then guess w unfolding ball_simps .. note w = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2550
        hence "kle n u w" "kle n w v"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2551
          using ksimplexD(6)[OF as] uvs' by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2552
        hence "w = a' \<or> w = a"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2553
          using uxv[of w] uvs' w by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2554
        thus ?thesis using w by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2555
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2556
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2557
        have "\<not> (\<forall>x\<in>s'. kle n x u)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2558
          unfolding ball_simps
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2559
          apply (rule_tac x=v in bexI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2560
          using uv `u \<noteq> v`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2561
          unfolding kle_antisym [of n u v,symmetric]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2562
          using `v\<in>s'`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2563
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2564
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2565
        hence "\<exists>y\<in>s'. \<exists>k\<in>{1..n}. \<forall>j. y j = (if j = k then u j + 1 else u j)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2566
          using ksimplex_successor[OF as `u\<in>s'`] by blast
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2567
        then guess w .. note w = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2568
        from this(2) guess kk .. note kk = this[rule_format]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2569
        have "\<not> kle n w u"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2570
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2571
          apply (rule, drule kle_imp_pointwise)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2572
          apply (erule_tac x = kk in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2573
          unfolding kk
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2574
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2575
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2576
        hence *: "kle n v w"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2577
          using True[rule_format,OF w(1)] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2578
        hence False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2579
        proof (cases "kk \<noteq> l")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2580
          case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2581
          thus False using *[THEN kle_imp_pointwise, unfolded l(2) kk k(2)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2582
            apply (erule_tac x=l in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2583
            using `k \<noteq> l`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2584
            apply auto  
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2585
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2586
        next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2587
          case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2588
          hence "kk \<noteq> k" using `k \<noteq> l` by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2589
          thus False using *[THEN kle_imp_pointwise, unfolded l(2) kk k(2)]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2590
            apply (erule_tac x=k in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2591
            using `k \<noteq> l`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2592
            apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2593
            done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2594
        qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2595
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2596
      qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2597
      thus "s' \<in> {s, insert a' (s - {a})}" proof(cases "a\<in>s'")
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2598
        case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2599
        hence "s' = s"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2600
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2601
          apply (rule lem1[OF a''(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2602
          using a'' `a \<in> s`
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2603
          apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2604
          done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2605
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2606
      next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2607
        case False hence "a'\<in>s'" using lem6 by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2608
        hence "s' = insert a' (s - {a})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2609
          apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2610
          apply (rule lem1[of _ a'' _ a'])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2611
          unfolding a''(2)[symmetric] using a'' and `a'\<notin>s` by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2612
        thus ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2613
      qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2614
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2615
    ultimately have *: "?A = {s, insert a' (s - {a})}" by blast
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2616
    have "s \<noteq> insert a' (s - {a})" using `a'\<notin>s` by auto
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2617
    hence ?thesis unfolding * by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2618
  }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2619
  ultimately show ?thesis by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2620
qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2621
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2622
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2623
subsection {* Hence another step towards concreteness. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2624
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2625
lemma kuhn_simplex_lemma:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2626
  assumes "\<forall>s. ksimplex p (n + 1) s \<longrightarrow> (rl ` s \<subseteq>{0..n+1})"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2627
    "odd (card{f. \<exists>s a. ksimplex p (n + 1) s \<and> a \<in> s \<and> (f = s - {a}) \<and>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2628
    (rl ` f = {0 .. n}) \<and> ((\<exists>j\<in>{1..n+1}.\<forall>x\<in>f. x j = 0) \<or> (\<exists>j\<in>{1..n+1}.\<forall>x\<in>f. x j = p))})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2629
  shows "odd(card {s\<in>{s. ksimplex p (n + 1) s}. rl ` s = {0..n+1} })"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2630
proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2631
  have *: "\<And>x y. x = y \<Longrightarrow> odd (card x) \<Longrightarrow> odd (card y)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2632
    by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2633
  have *: "odd(card {f\<in>{f. \<exists>s\<in>{s. ksimplex p (n + 1) s}. (\<exists>a\<in>s. f = s - {a})}.
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2634
    (rl ` f = {0..n}) \<and>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2635
     ((\<exists>j\<in>{1..n+1}. \<forall>x\<in>f. x j = 0) \<or>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2636
      (\<exists>j\<in>{1..n+1}. \<forall>x\<in>f. x j = p))})"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2637
    apply (rule *[OF _ assms(2)])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2638
    apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2639
    done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2640
  show ?thesis
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2641
    apply (rule kuhn_complete_lemma[OF finite_simplices])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2642
    prefer 6
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2643
    apply (rule *)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2644
    apply (rule, rule, rule)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2645
    apply (subst ksimplex_def)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2646
    defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2647
    apply (rule, rule assms(1)[rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2648
    unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2649
    apply assumption
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2650
    apply default+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2651
    unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2652
    apply (erule disjE bexE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2653
    defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2654
    apply (erule disjE bexE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2655
    defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2656
    apply default+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2657
    unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2658
    apply (erule disjE bexE)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2659
    unfolding mem_Collect_eq
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2660
  proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2661
    fix f s a
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2662
    assume as: "ksimplex p (n + 1) s" "a\<in>s" "f = s - {a}"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2663
    let ?S = "{s. ksimplex p (n + 1) s \<and> (\<exists>a\<in>s. f = s - {a})}"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2664
    have S: "?S = {s'. ksimplex p (n + 1) s' \<and> (\<exists>b\<in>s'. s' - {b} = s - {a})}"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2665
      unfolding as by blast
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2666
    {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2667
      fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2668
      assume j: "j \<in> {1..n + 1}" "\<forall>x\<in>f. x j = 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2669
      thus "card {s. ksimplex p (n + 1) s \<and> (\<exists>a\<in>s. f = s - {a})} = 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2670
        unfolding S
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2671
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2672
        apply (rule ksimplex_replace_0)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2673
        apply (rule as)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2674
        unfolding as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2675
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2676
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2677
    }
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2678
    {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2679
      fix j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2680
      assume j: "j \<in> {1..n + 1}" "\<forall>x\<in>f. x j = p"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2681
      thus "card {s. ksimplex p (n + 1) s \<and> (\<exists>a\<in>s. f = s - {a})} = 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2682
        unfolding S
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2683
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2684
        apply (rule ksimplex_replace_1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2685
        apply (rule as)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2686
        unfolding as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2687
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2688
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2689
    }
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2690
    show "\<not> ((\<exists>j\<in>{1..n+1}. \<forall>x\<in>f. x j = 0) \<or> (\<exists>j\<in>{1..n+1}. \<forall>x\<in>f. x j = p)) \<Longrightarrow> card ?S = 2"
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2691
      unfolding S
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2692
      apply (rule ksimplex_replace_2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2693
      apply (rule as)+
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2694
      unfolding as
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2695
      apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2696
      done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2697
  qed auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2698
qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2699
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2700
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2701
subsection {* Reduced labelling. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2702
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2703
definition "reduced label (n::nat) (x::nat\<Rightarrow>nat) =
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2704
  (SOME k. k \<le> n \<and> (\<forall>i. 1\<le>i \<and> i<k+1 \<longrightarrow> label x i = 0) \<and>
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2705
    (k = n \<or> label x (k + 1) \<noteq> (0::nat)))"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2706
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2707
lemma reduced_labelling:
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2708
  shows "reduced label n x \<le> n" (is ?t1)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2709
    and "\<forall>i. 1\<le>i \<and> i < reduced label n x + 1 \<longrightarrow> (label x i = 0)" (is ?t2)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2710
    and "(reduced label n x = n) \<or> (label x (reduced label n x + 1) \<noteq> 0)"  (is ?t3)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2711
proof -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2712
  have num_WOP: "\<And>P k. P (k::nat) \<Longrightarrow> \<exists>n. P n \<and> (\<forall>m<n. \<not> P m)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2713
    apply (drule ex_has_least_nat[where m="\<lambda>x. x"])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2714
    apply (erule exE,rule_tac x=x in exI)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2715
    apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2716
    done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2717
  have *: "n \<le> n \<and> (label x (n + 1) \<noteq> 0 \<or> n = n)" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2718
  then guess N
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2719
    apply (drule_tac num_WOP[of "\<lambda>j. j\<le>n \<and> (label x (j+1) \<noteq> 0 \<or> n = j)"])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2720
    apply (erule exE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2721
    done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2722
  note N = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2723
  have N': "N \<le> n"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2724
    "\<forall>i. 1 \<le> i \<and> i < N + 1 \<longrightarrow> label x i = 0" "N = n \<or> label x (N + 1) \<noteq> 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2725
    defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2726
  proof (rule, rule)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2727
    fix i
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2728
    assume i: "1\<le>i \<and> i<N+1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2729
    thus "label x i = 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2730
      using N[THEN conjunct2,THEN spec[where x="i - 1"]]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2731
      using N by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2732
  qed (insert N, auto)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2733
  show ?t1 ?t2 ?t3
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2734
    unfolding reduced_def
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2735
    apply (rule_tac[!] someI2_ex)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2736
    using N'
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2737
    apply (auto intro!: exI[where x=N])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2738
    done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2739
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2740
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2741
lemma reduced_labelling_unique:
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2742
  fixes x :: "nat \<Rightarrow> nat"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2743
  assumes "r \<le> n"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2744
    "\<forall>i. 1 \<le> i \<and> i < r + 1 \<longrightarrow> (label x i = 0)" "(r = n) \<or> (label x (r + 1) \<noteq> 0)"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2745
  shows "reduced label n x = r"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2746
  apply (rule le_antisym)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2747
  apply (rule_tac[!] ccontr)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2748
  unfolding not_le
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2749
  using reduced_labelling[of label n x]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2750
  using assms
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2751
  apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2752
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2753
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2754
lemma reduced_labelling_zero:
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2755
  assumes "j\<in>{1..n}" "label x j = 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2756
  shows "reduced label n x \<noteq> j - 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2757
  using reduced_labelling[of label n x]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2758
  using assms by fastforce
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2759
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2760
lemma reduced_labelling_nonzero:
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2761
  assumes "j\<in>{1..n}" "label x j \<noteq> 0"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2762
  shows "reduced label n x < j"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2763
  using assms and reduced_labelling[of label n x]
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2764
  apply (erule_tac x=j in allE)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2765
  apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2766
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2767
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2768
lemma reduced_labelling_Suc:
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2769
  assumes "reduced lab (n + 1) x \<noteq> n + 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2770
  shows "reduced lab (n + 1) x = reduced lab n x"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2771
  apply (subst eq_commute)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2772
  apply (rule reduced_labelling_unique)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2773
  using reduced_labelling[of lab "n+1" x] and assms
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2774
  apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2775
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2776
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2777
lemma complete_face_top:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2778
  assumes "\<forall>x\<in>f. \<forall>j\<in>{1..n+1}. x j = 0 \<longrightarrow> lab x j = 0"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2779
          "\<forall>x\<in>f. \<forall>j\<in>{1..n+1}. x j = p \<longrightarrow> lab x j = 1"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2780
  shows "((reduced lab (n + 1)) ` f = {0..n}) \<and> ((\<exists>j\<in>{1..n+1}. \<forall>x\<in>f. x j = 0) \<or> (\<exists>j\<in>{1..n+1}. \<forall>x\<in>f. x j = p)) \<longleftrightarrow>
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2781
  ((reduced lab (n + 1)) ` f = {0..n}) \<and> (\<forall>x\<in>f. x (n + 1) = p)" (is "?l = ?r")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2782
proof
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2783
  assume ?l (is "?as \<and> (?a \<or> ?b)")
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2784
  thus ?r
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2785
    apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2786
    apply (rule, erule conjE, assumption)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2787
  proof (cases ?a)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2788
    case True
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2789
    then guess j .. note j = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2790
    {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2791
      fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2792
      assume x: "x \<in> f"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2793
      have "reduced lab (n + 1) x \<noteq> j - 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2794
        using j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2795
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2796
        apply (rule reduced_labelling_zero)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2797
        defer
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2798
        apply (rule assms(1)[rule_format])
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2799
        using x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2800
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2801
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2802
    }
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2803
    moreover have "j - 1 \<in> {0..n}" using j by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  2804
    then guess y unfolding `?l`[THEN conjunct1,symmetric] and image_iff .. note y = this
53186
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2805
    ultimately have False by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2806
    thus "\<forall>x\<in>f. x (n + 1) = p" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2807
  next
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2808
    case False
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2809
    hence ?b using `?l` by blast
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2810
    then guess j .. note j = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2811
    {
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2812
      fix x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2813
      assume x: "x \<in> f"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2814
      have "reduced lab (n + 1) x < j"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2815
        using j
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2816
        apply -
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2817
        apply (rule reduced_labelling_nonzero)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2818
        using assms(2)[rule_format,of x j] and x
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2819
        apply auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2820
        done
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2821
    } note * = this
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2822
    have "j = n + 1"
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2823
    proof (rule ccontr)
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2824
      case goal1
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2825
      hence "j < n + 1" using j by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2826
      moreover
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2827
      have "n \<in> {0..n}" by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2828
      then guess y unfolding `?l`[THEN conjunct1,symmetric] image_iff ..
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2829
      ultimately show False using *[of y] by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2830
    qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2831
    thus "\<forall>x\<in>f. x (n + 1) = p" using j by auto
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2832
  qed
0f4d9df1eaec tuned proofs;
wenzelm
parents: 53185
diff changeset
  2833
qed(auto)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2834
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2835
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2836
subsection {* Hence we get just about the nice induction. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2837
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2838
lemma kuhn_induction:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2839
  assumes "0 < p" "\<forall>x. \<forall>j\<in>{1..n+1}. (\<forall>j. x j \<le> p) \<and> (x j = 0) \<longrightarrow> (lab x j = 0)"
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2840
    "\<forall>x. \<forall>j\<in>{1..n+1}. (\<forall>j. x j \<le> p) \<and> (x j = p) \<longrightarrow> (lab x j = 1)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2841
    "odd (card {f. ksimplex p n f \<and> ((reduced lab n) ` f = {0..n})})"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2842
  shows "odd (card {s. ksimplex p (n+1) s \<and>((reduced lab (n+1)) `  s = {0..n+1})})"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2843
proof -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2844
  have *: "\<And>s t. odd (card s) \<Longrightarrow> s = t \<Longrightarrow> odd (card t)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2845
    "\<And>s f. (\<And>x. f x \<le> n +1 ) \<Longrightarrow> f ` s \<subseteq> {0..n+1}" by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2846
  show ?thesis
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2847
    apply (rule kuhn_simplex_lemma[unfolded mem_Collect_eq])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2848
    apply (rule, rule, rule *, rule reduced_labelling)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2849
    apply (rule *(1)[OF assms(4)])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2850
    apply (rule set_eqI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2851
    unfolding mem_Collect_eq
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2852
    apply (rule, erule conjE)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2853
    defer
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2854
    apply rule
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2855
  proof -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2856
    fix f
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2857
    assume as: "ksimplex p n f" "reduced lab n ` f = {0..n}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2858
    have *: "\<forall>x\<in>f. \<forall>j\<in>{1..n + 1}. x j = 0 \<longrightarrow> lab x j = 0"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2859
      "\<forall>x\<in>f. \<forall>j\<in>{1..n + 1}. x j = p \<longrightarrow> lab x j = 1"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2860
      using assms(2-3) using as(1)[unfolded ksimplex_def] by auto
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2861
    have allp: "\<forall>x\<in>f. x (n + 1) = p"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2862
      using assms(2) using as(1)[unfolded ksimplex_def] by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2863
    {
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2864
      fix x
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2865
      assume "x \<in> f"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2866
      hence "reduced lab (n + 1) x < n + 1"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2867
        apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2868
        apply (rule reduced_labelling_nonzero)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2869
        defer using assms(3) using as(1)[unfolded ksimplex_def]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2870
        apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2871
        done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2872
      hence "reduced lab (n + 1) x = reduced lab n x"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2873
        apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2874
        apply (rule reduced_labelling_Suc)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2875
        using reduced_labelling(1)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2876
        apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2877
        done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2878
    }
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2879
    hence "reduced lab (n + 1) ` f = {0..n}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2880
      unfolding as(2)[symmetric]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2881
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2882
      apply (rule set_eqI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2883
      unfolding image_iff
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2884
      apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2885
      done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2886
    moreover guess s using as(1)[unfolded simplex_top_face[OF assms(1) allp,symmetric]] ..
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2887
    then guess a ..
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2888
    ultimately show "\<exists>s a. ksimplex p (n + 1) s \<and>
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2889
      a \<in> s \<and> f = s - {a} \<and> reduced lab (n + 1) ` f = {0..n} \<and> ((\<exists>j\<in>{1..n + 1}. \<forall>x\<in>f. x j = 0) \<or> (\<exists>j\<in>{1..n + 1}. \<forall>x\<in>f. x j = p))" (is ?ex)
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2890
      apply (rule_tac x = s in exI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2891
      apply (rule_tac x = a in exI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2892
      unfolding complete_face_top[OF *]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2893
      using allp as(1)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2894
      apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2895
      done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2896
  next
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2897
    fix f
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2898
    assume as: "\<exists>s a. ksimplex p (n + 1) s \<and>
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2899
      a \<in> s \<and> f = s - {a} \<and> reduced lab (n + 1) ` f = {0..n} \<and> ((\<exists>j\<in>{1..n + 1}. \<forall>x\<in>f. x j = 0) \<or> (\<exists>j\<in>{1..n + 1}. \<forall>x\<in>f. x j = p))" (is ?ex)
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2900
    then guess s ..
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2901
    then guess a
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2902
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2903
      apply (erule exE,(erule conjE)+)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2904
      done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2905
    note sa = this
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2906
    {
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2907
      fix x
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2908
      assume "x \<in> f"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2909
      hence "reduced lab (n + 1) x \<in> reduced lab (n + 1) ` f"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2910
        by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2911
      hence "reduced lab (n + 1) x < n + 1"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2912
        using sa(4) by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2913
      hence "reduced lab (n + 1) x = reduced lab n x"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2914
        apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2915
        apply (rule reduced_labelling_Suc)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2916
        using reduced_labelling(1)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2917
        apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2918
        done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2919
    }
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2920
    thus part1: "reduced lab n ` f = {0..n}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2921
      unfolding sa(4)[symmetric]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2922
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2923
      apply (rule set_eqI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2924
      unfolding image_iff
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2925
      apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2926
      done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2927
    have *: "\<forall>x\<in>f. x (n + 1) = p"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2928
    proof (cases "\<exists>j\<in>{1..n + 1}. \<forall>x\<in>f. x j = 0")
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2929
      case True
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2930
      then guess j ..
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2931
      hence "\<And>x. x \<in> f \<Longrightarrow> reduced lab (n + 1) x \<noteq> j - 1"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2932
        apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2933
        apply (rule reduced_labelling_zero)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2934
        apply assumption
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2935
        apply (rule assms(2)[rule_format])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2936
        using sa(1)[unfolded ksimplex_def]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2937
        unfolding sa
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2938
        apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2939
        done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2940
      moreover
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2941
      have "j - 1 \<in> {0..n}" using `j\<in>{1..n+1}` by auto
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2942
      ultimately have False
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2943
        unfolding sa(4)[symmetric]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2944
        unfolding image_iff
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2945
        by fastforce
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2946
      thus ?thesis by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2947
    next
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2948
      case False
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2949
      hence "\<exists>j\<in>{1..n + 1}. \<forall>x\<in>f. x j = p"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2950
        using sa(5) by fastforce then guess j .. note j=this
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2951
      thus ?thesis
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2952
      proof (cases "j = n + 1")
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2953
        case False hence *: "j \<in> {1..n}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2954
          using j by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2955
        hence "\<And>x. x \<in> f \<Longrightarrow> reduced lab n x < j"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2956
          apply (rule reduced_labelling_nonzero)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2957
        proof -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2958
          fix x
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2959
          assume "x \<in> f"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2960
          hence "lab x j = 1"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2961
            apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2962
            apply (rule assms(3)[rule_format,OF j(1)])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2963
            using sa(1)[unfolded ksimplex_def]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2964
            using j
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2965
            unfolding sa
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2966
            apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2967
            done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2968
          thus "lab x j \<noteq> 0" by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2969
        qed
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2970
        moreover have "j \<in> {0..n}" using * by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2971
        ultimately have False
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2972
          unfolding part1[symmetric]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2973
          using * unfolding image_iff
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2974
          by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2975
        thus ?thesis by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2976
      qed auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2977
    qed
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2978
    thus "ksimplex p n f"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2979
      using as unfolding simplex_top_face[OF assms(1) *,symmetric] by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2980
  qed
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2981
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2982
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2983
lemma kuhn_induction_Suc:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2984
  assumes "0 < p" "\<forall>x. \<forall>j\<in>{1..Suc n}. (\<forall>j. x j \<le> p) \<and> (x j = 0) \<longrightarrow> (lab x j = 0)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2985
                  "\<forall>x. \<forall>j\<in>{1..Suc n}. (\<forall>j. x j \<le> p) \<and> (x j = p) \<longrightarrow> (lab x j = 1)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2986
        "odd (card {f. ksimplex p n f \<and> ((reduced lab n) ` f = {0..n})})"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2987
  shows "odd (card {s. ksimplex p (Suc n) s \<and>((reduced lab (Suc n)) `  s = {0..Suc n})})"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2988
  using assms unfolding Suc_eq_plus1 by(rule kuhn_induction)
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2989
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2990
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2991
subsection {* And so we get the final combinatorial result. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  2992
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2993
lemma ksimplex_0: "ksimplex p 0 s \<longleftrightarrow> s = {(\<lambda>x. p)}" (is "?l = ?r")
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2994
proof
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2995
  assume l: ?l
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2996
  guess a using ksimplexD(3)[OF l, unfolded add_0] unfolding card_1_exists .. note a = this
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2997
  have "a = (\<lambda>x. p)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2998
    using ksimplexD(5)[OF l, rule_format, OF a(1)] by rule auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  2999
  thus ?r using a by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3000
next
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3001
  assume r: ?r
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3002
  show ?l unfolding r ksimplex_eq by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3003
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3004
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3005
lemma reduce_labelling_zero[simp]: "reduced lab 0 x = 0"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3006
  by (rule reduced_labelling_unique) auto
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3007
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3008
lemma kuhn_combinatorial:
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3009
  assumes "0 < p" "\<forall>x j. (\<forall>j. x(j) \<le> p) \<and> 1 \<le> j \<and> j \<le> n \<and> (x j = 0) \<longrightarrow> (lab x j = 0)"
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3010
    "\<forall>x j. (\<forall>j. x(j) \<le> p) \<and> 1 \<le> j \<and> j \<le> n  \<and> (x j = p) \<longrightarrow> (lab x j = 1)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3011
  shows " odd (card {s. ksimplex p n s \<and> ((reduced lab n) ` s = {0..n})})"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3012
  using assms
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3013
proof (induct n)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3014
  let ?M = "\<lambda>n. {s. ksimplex p n s \<and> ((reduced lab n) ` s = {0..n})}"
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3015
  {
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3016
    case 0
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3017
    have *: "?M 0 = {{(\<lambda>x. p)}}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3018
      unfolding ksimplex_0 by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3019
    show ?case unfolding * by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3020
  next
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3021
    case (Suc n)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3022
    have "odd (card (?M n))"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3023
      apply (rule Suc(1)[OF Suc(2)])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3024
      using Suc(3-)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3025
      apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3026
      done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3027
    thus ?case
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3028
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3029
      apply (rule kuhn_induction_Suc)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3030
      using Suc(2-)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3031
      apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3032
      done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3033
  }
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3034
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3035
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3036
lemma kuhn_lemma:
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3037
  assumes "0 < (p::nat)" "0 < (n::nat)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3038
    "\<forall>x. (\<forall>i\<in>{1..n}. x i \<le> p) \<longrightarrow> (\<forall>i\<in>{1..n}. (label x i = (0::nat)) \<or> (label x i = 1))"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3039
    "\<forall>x. (\<forall>i\<in>{1..n}. x i \<le> p) \<longrightarrow> (\<forall>i\<in>{1..n}. (x i = 0) \<longrightarrow> (label x i = 0))"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3040
    "\<forall>x. (\<forall>i\<in>{1..n}. x i \<le> p) \<longrightarrow> (\<forall>i\<in>{1..n}. (x i = p) \<longrightarrow> (label x i = 1))"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3041
  obtains q where "\<forall>i\<in>{1..n}. q i < p"
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3042
    "\<forall>i\<in>{1..n}. \<exists>r s. (\<forall>j\<in>{1..n}. q(j) \<le> r(j) \<and> r(j) \<le> q(j) + 1) \<and>
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3043
                                 (\<forall>j\<in>{1..n}. q(j) \<le> s(j) \<and> s(j) \<le> q(j) + 1) \<and>
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3044
                                 ~(label r i = label s i)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3045
proof -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3046
  let ?A = "{s. ksimplex p n s \<and> reduced label n ` s = {0..n}}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3047
  have "n \<noteq> 0" using assms by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3048
  have conjD:"\<And>P Q. P \<and> Q \<Longrightarrow> P" "\<And>P Q. P \<and> Q \<Longrightarrow> Q"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3049
    by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3050
  have "odd (card ?A)"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3051
    apply (rule kuhn_combinatorial[of p n label])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3052
    using assms
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3053
    apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3054
    done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3055
  hence "card ?A \<noteq> 0"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3056
    apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3057
    apply (rule ccontr)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3058
    apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3059
    done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3060
  hence "?A \<noteq> {}" unfolding card_eq_0_iff by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3061
  then obtain s where "s \<in> ?A"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3062
    by auto note s=conjD[OF this[unfolded mem_Collect_eq]]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3063
  guess a b by (rule ksimplex_extrema_strong[OF s(1) `n\<noteq>0`]) note ab = this
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3064
  show ?thesis
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3065
    apply (rule that[of a])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3066
    apply (rule_tac[!] ballI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3067
  proof -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3068
    fix i
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3069
    assume "i\<in>{1..n}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3070
    hence "a i + 1 \<le> p"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3071
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3072
      apply (rule order_trans[of _ "b i"])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3073
      apply (subst ab(5)[THEN spec[where x=i]])
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3074
      using s(1)[unfolded ksimplex_def]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3075
      defer
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3076
      apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3077
      apply (erule conjE)+
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3078
      apply (drule_tac bspec[OF _ ab(2)])+
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3079
      apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3080
      done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3081
    thus "a i < p" by auto
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3082
  next
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3083
    case goal2
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3084
    hence "i \<in> reduced label n ` s" using s by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3085
    then guess u unfolding image_iff .. note u = this
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3086
    from goal2 have "i - 1 \<in> reduced label n ` s"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3087
      using s by auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3088
    then guess v unfolding image_iff .. note v = this
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3089
    show ?case
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3090
      apply (rule_tac x = u in exI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3091
      apply (rule_tac x = v in exI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3092
      apply (rule conjI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3093
      defer
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3094
      apply (rule conjI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3095
      defer 2
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3096
      apply (rule_tac[1-2] ballI)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3097
    proof -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3098
      show "label u i \<noteq> label v i"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3099
        using reduced_labelling [of label n u] reduced_labelling [of label n v]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3100
        unfolding u(2)[symmetric] v(2)[symmetric]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3101
        using goal2
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3102
        apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3103
        done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3104
      fix j
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3105
      assume j: "j \<in> {1..n}"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3106
      show "a j \<le> u j \<and> u j \<le> a j + 1" "a j \<le> v j \<and> v j \<le> a j + 1"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3107
        using conjD[OF ab(4)[rule_format, OF u(1)]]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3108
          and conjD[OF ab(4)[rule_format, OF v(1)]]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3109
        apply -
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3110
        apply (drule_tac[!] kle_imp_pointwise)+
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3111
        apply (erule_tac[!] x=j in allE)+
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3112
        unfolding ab(5)[rule_format]
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3113
        using j
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3114
        apply auto
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3115
        done
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3116
    qed
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3117
  qed
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3118
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3119
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3120
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3121
subsection {* The main result for the unit cube. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3122
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3123
lemma kuhn_labelling_lemma':
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3124
  assumes "(\<forall>x::nat\<Rightarrow>real. P x \<longrightarrow> P (f x))"  "\<forall>x. P x \<longrightarrow> (\<forall>i::nat. Q i \<longrightarrow> 0 \<le> x i \<and> x i \<le> 1)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3125
  shows "\<exists>l. (\<forall>x i. l x i \<le> (1::nat)) \<and>
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3126
             (\<forall>x i. P x \<and> Q i \<and> (x i = 0) \<longrightarrow> (l x i = 0)) \<and>
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3127
             (\<forall>x i. P x \<and> Q i \<and> (x i = 1) \<longrightarrow> (l x i = 1)) \<and>
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3128
             (\<forall>x i. P x \<and> Q i \<and> (l x i = 0) \<longrightarrow> x i \<le> f(x) i) \<and>
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3129
             (\<forall>x i. P x \<and> Q i \<and> (l x i = 1) \<longrightarrow> f(x) i \<le> x i)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3130
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3131
  have and_forall_thm: "\<And>P Q. (\<forall>x. P x) \<and> (\<forall>x. Q x) \<longleftrightarrow> (\<forall>x. P x \<and> Q x)" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3132
  have *: "\<forall>x y::real. 0 \<le> x \<and> x \<le> 1 \<and> 0 \<le> y \<and> y \<le> 1 \<longrightarrow> (x \<noteq> 1 \<and> x \<le> y \<or> x \<noteq> 0 \<and> y \<le> x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3133
    by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3134
  show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3135
    unfolding and_forall_thm
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3136
    apply (subst choice_iff[symmetric])+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3137
  proof (rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3138
    case goal1
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3139
    let ?R = "\<lambda>y. (P x \<and> Q xa \<and> x xa = 0 \<longrightarrow> y = (0::nat)) \<and>
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3140
      (P x \<and> Q xa \<and> x xa = 1 \<longrightarrow> y = 1) \<and>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3141
      (P x \<and> Q xa \<and> y = 0 \<longrightarrow> x xa \<le> (f x) xa) \<and>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3142
      (P x \<and> Q xa \<and> y = 1 \<longrightarrow> (f x) xa \<le> x xa)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3143
    {
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3144
      assume "P x" "Q xa"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3145
      hence "0 \<le> (f x) xa \<and> (f x) xa \<le> 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3146
        using assms(2)[rule_format,of "f x" xa]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3147
        apply (drule_tac assms(1)[rule_format])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3148
        apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3149
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3150
    }
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3151
    hence "?R 0 \<or> ?R 1" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3152
    thus ?case by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3153
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3154
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3155
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3156
lemma brouwer_cube:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3157
  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'a::ordered_euclidean_space"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3158
  assumes "continuous_on {0..(\<Sum>Basis)} f" "f ` {0..(\<Sum>Basis)} \<subseteq> {0..(\<Sum>Basis)}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3159
  shows "\<exists>x\<in>{0..(\<Sum>Basis)}. f x = x"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3160
proof (rule ccontr)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3161
  def n \<equiv> "DIM('a)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3162
  have n: "1 \<le> n" "0 < n" "n \<noteq> 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3163
    unfolding n_def by (auto simp add: Suc_le_eq DIM_positive)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3164
  assume "\<not> (\<exists>x\<in>{0..\<Sum>Basis}. f x = x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3165
  hence *: "\<not> (\<exists>x\<in>{0..\<Sum>Basis}. f x - x = 0)" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3166
  guess d
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3167
    apply (rule brouwer_compactness_lemma[OF compact_interval _ *])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3168
    apply (rule continuous_on_intros assms)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3169
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3170
  note d = this [rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3171
  have *: "\<forall>x. x \<in> {0..\<Sum>Basis} \<longrightarrow> f x \<in> {0..\<Sum>Basis}"  "\<forall>x. x \<in> {0..(\<Sum>Basis)::'a} \<longrightarrow>
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3172
    (\<forall>i\<in>Basis. True \<longrightarrow> 0 \<le> x \<bullet> i \<and> x \<bullet> i \<le> 1)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3173
    using assms(2)[unfolded image_subset_iff Ball_def]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3174
    unfolding mem_interval by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3175
  guess label using kuhn_labelling_lemma[OF *] by (elim exE conjE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3176
  note label = this [rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3177
  have lem1: "\<forall>x\<in>{0..\<Sum>Basis}.\<forall>y\<in>{0..\<Sum>Basis}.\<forall>i\<in>Basis. label x i \<noteq> label y i
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3178
    \<longrightarrow> abs(f x \<bullet> i - x \<bullet> i) \<le> norm(f y - f x) + norm(y - x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3179
  proof safe
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3180
    fix x y :: 'a
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3181
    assume xy: "x\<in>{0..\<Sum>Basis}" "y\<in>{0..\<Sum>Basis}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3182
    fix i
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3183
    assume i: "label x i \<noteq> label y i" "i \<in> Basis"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3184
    have *: "\<And>x y fx fy :: real. x \<le> fx \<and> fy \<le> y \<or> fx \<le> x \<and> y \<le> fy \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3185
      abs (fx - x) \<le> abs (fy - fx) + abs (y - x)" by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3186
    have "\<bar>(f x - x) \<bullet> i\<bar> \<le> abs((f y - f x)\<bullet>i) + abs((y - x)\<bullet>i)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3187
      unfolding inner_simps
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3188
      apply (rule *)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3189
      apply (cases "label x i = 0")
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3190
      apply (rule disjI1, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3191
      prefer 3
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3192
    proof (rule disjI2, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3193
      assume lx: "label x i = 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3194
      hence ly: "label y i = 1"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3195
        using i label(1)[of i y] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3196
      show "x \<bullet> i \<le> f x \<bullet> i"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3197
        apply (rule label(4)[rule_format])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3198
        using xy lx i(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3199
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3200
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3201
      show "f y \<bullet> i \<le> y \<bullet> i"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3202
        apply (rule label(5)[rule_format])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3203
        using xy ly i(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3204
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3205
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3206
    next
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3207
      assume "label x i \<noteq> 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3208
      hence l:"label x i = 1" "label y i = 0"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3209
        using i label(1)[of i x] label(1)[of i y] by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3210
      show "f x \<bullet> i \<le> x \<bullet> i"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3211
        apply (rule label(5)[rule_format])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3212
        using xy l i(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3213
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3214
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3215
      show "y \<bullet> i \<le> f y \<bullet> i"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3216
        apply (rule label(4)[rule_format])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3217
        using xy l i(2)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3218
        apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3219
        done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3220
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3221
    also have "\<dots> \<le> norm (f y - f x) + norm (y - x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3222
      apply (rule add_mono)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3223
      apply (rule Basis_le_norm[OF i(2)])+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3224
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3225
    finally show "\<bar>f x \<bullet> i - x \<bullet> i\<bar> \<le> norm (f y - f x) + norm (y - x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3226
      unfolding inner_simps .
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3227
  qed
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3228
  have "\<exists>e>0. \<forall>x\<in>{0..\<Sum>Basis}. \<forall>y\<in>{0..\<Sum>Basis}. \<forall>z\<in>{0..\<Sum>Basis}. \<forall>i\<in>Basis.
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3229
    norm(x - z) < e \<and> norm(y - z) < e \<and> label x i \<noteq> label y i \<longrightarrow> abs((f(z) - z)\<bullet>i) < d / (real n)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3230
  proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3231
    have d':"d / real n / 8 > 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3232
      apply (rule divide_pos_pos)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3233
      using d(1) unfolding n_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3234
      apply (auto simp:  DIM_positive)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3235
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3236
    have *: "uniformly_continuous_on {0..\<Sum>Basis} f"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3237
      by (rule compact_uniformly_continuous[OF assms(1) compact_interval])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3238
    guess e using *[unfolded uniformly_continuous_on_def,rule_format,OF d'] by (elim exE conjE)
36587
534418d8d494 remove redundant lemma vector_dist_norm
huffman
parents: 36432
diff changeset
  3239
    note e=this[rule_format,unfolded dist_norm]
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3240
    show ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3241
      apply (rule_tac x="min (e/2) (d/real n/8)" in exI)
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3242
      apply safe
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3243
    proof -
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3244
      show "0 < min (e / 2) (d / real n / 8)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3245
        using d' e by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3246
      fix x y z i
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3247
      assume as: "x \<in> {0..\<Sum>Basis}" "y \<in> {0..\<Sum>Basis}" "z \<in> {0..\<Sum>Basis}"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3248
        "norm (x - z) < min (e / 2) (d / real n / 8)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3249
        "norm (y - z) < min (e / 2) (d / real n / 8)" "label x i \<noteq> label y i"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3250
        and i: "i \<in> Basis"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3251
      have *: "\<And>z fz x fx n1 n2 n3 n4 d4 d :: real. abs(fx - x) \<le> n1 + n2 \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3252
        abs(fx - fz) \<le> n3 \<Longrightarrow> abs(x - z) \<le> n4 \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3253
        n1 < d4 \<Longrightarrow> n2 < 2 * d4 \<Longrightarrow> n3 < d4 \<Longrightarrow> n4 < d4 \<Longrightarrow>
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3254
        (8 * d4 = d) \<Longrightarrow> abs(fz - z) < d" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3255
      show "\<bar>(f z - z) \<bullet> i\<bar> < d / real n" unfolding inner_simps
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3256
      proof (rule *)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3257
        show "\<bar>f x \<bullet> i - x \<bullet> i\<bar> \<le> norm (f y -f x) + norm (y - x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3258
          apply (rule lem1[rule_format])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3259
          using as i apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3260
          done
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3261
        show "\<bar>f x \<bullet> i - f z \<bullet> i\<bar> \<le> norm (f x - f z)" "\<bar>x \<bullet> i - z \<bullet> i\<bar> \<le> norm (x - z)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3262
          unfolding inner_diff_left[symmetric] by(rule Basis_le_norm[OF i])+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3263
        have tria:"norm (y - x) \<le> norm (y - z) + norm (x - z)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3264
          using dist_triangle[of y x z, unfolded dist_norm]
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3265
          unfolding norm_minus_commute by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3266
        also have "\<dots> < e / 2 + e / 2"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3267
          apply (rule add_strict_mono)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3268
          using as(4,5)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3269
          apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3270
          done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3271
        finally show "norm (f y - f x) < d / real n / 8"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3272
          apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3273
          apply (rule e(2))
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3274
          using as
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3275
          apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3276
          done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3277
        have "norm (y - z) + norm (x - z) < d / real n / 8 + d / real n / 8"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3278
          apply (rule add_strict_mono)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3279
          using as
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3280
          apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3281
          done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3282
        thus "norm (y - x) < 2 * (d / real n / 8)" using tria by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3283
        show "norm (f x - f z) < d / real n / 8"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3284
          apply (rule e(2))
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3285
          using as e(1)
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3286
          apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3287
          done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3288
      qed (insert as, auto)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3289
    qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3290
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3291
  then guess e by (elim exE conjE) note e=this[rule_format]
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3292
  guess p using real_arch_simple[of "1 + real n / e"] .. note p=this
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3293
  have "1 + real n / e > 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3294
    apply (rule add_pos_pos)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3295
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3296
    apply (rule divide_pos_pos)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3297
    using e(1) n
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3298
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3299
    done
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3300
  then have "p > 0" using p by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3301
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3302
  obtain b :: "nat \<Rightarrow> 'a" where b: "bij_betw b {1..n} Basis"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3303
    by atomize_elim (auto simp: n_def intro!: finite_same_card_bij)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3304
  def b' \<equiv> "inv_into {1..n} b"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3305
  then have b': "bij_betw b' Basis {1..n}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3306
    using bij_betw_inv_into[OF b] by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3307
  then have b'_Basis: "\<And>i. i \<in> Basis \<Longrightarrow> b' i \<in> {Suc 0 .. n}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3308
    unfolding bij_betw_def by (auto simp: set_eq_iff)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3309
  have bb'[simp]:"\<And>i. i \<in> Basis \<Longrightarrow> b (b' i) = i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3310
    unfolding b'_def using b by (auto simp: f_inv_into_f bij_betw_def)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3311
  have b'b[simp]:"\<And>i. i \<in> {1..n} \<Longrightarrow> b' (b i) = i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3312
    unfolding b'_def using b by (auto simp: inv_into_f_eq bij_betw_def)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3313
  have *: "\<And>x :: nat. x=0 \<or> x=1 \<longleftrightarrow> x\<le>1" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3314
  have b'': "\<And>j. j \<in> {Suc 0..n} \<Longrightarrow> b j \<in> Basis"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3315
    using b unfolding bij_betw_def by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3316
  have q1: "0 < p" "0 < n"  "\<forall>x. (\<forall>i\<in>{1..n}. x i \<le> p) \<longrightarrow>
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3317
    (\<forall>i\<in>{1..n}. (label (\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<circ> b) i = 0 \<or>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3318
                (label (\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<circ> b) i = 1)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3319
    unfolding * using `p>0` `n>0` using label(1)[OF b''] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3320
  have q2: "\<forall>x. (\<forall>i\<in>{1..n}. x i \<le> p) \<longrightarrow> (\<forall>i\<in>{1..n}. x i = 0 \<longrightarrow>
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3321
      (label (\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<circ> b) i = 0)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3322
    "\<forall>x. (\<forall>i\<in>{1..n}. x i \<le> p) \<longrightarrow> (\<forall>i\<in>{1..n}. x i = p \<longrightarrow>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3323
      (label (\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<circ> b) i = 1)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3324
    apply (rule, rule, rule, rule)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3325
    defer
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3326
  proof (rule, rule, rule, rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3327
    fix x i
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3328
    assume as: "\<forall>i\<in>{1..n}. x i \<le> p" "i \<in> {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3329
    {
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3330
      assume "x i = p \<or> x i = 0"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3331
      have "(\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<in> {0::'a..\<Sum>Basis}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3332
        unfolding mem_interval using as b'_Basis
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3333
        by (auto simp add: inner_simps bij_betw_def zero_le_divide_iff divide_le_eq_1)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3334
    }
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3335
    note cube = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3336
    {
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3337
      assume "x i = p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3338
      thus "(label (\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<circ> b) i = 1"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3339
        unfolding o_def using cube as `p>0`
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3340
        by (intro label(3)) (auto simp add: b'')
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3341
    }
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3342
    {
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3343
      assume "x i = 0"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3344
      thus "(label (\<Sum>i\<in>Basis. (real (x (b' i)) / real p) *\<^sub>R i) \<circ> b) i = 0"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3345
        unfolding o_def using cube as `p>0`
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3346
        by (intro label(2)) (auto simp add: b'')
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3347
    }
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3348
  qed
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3349
  guess q by (rule kuhn_lemma[OF q1 q2]) note q = this
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3350
  def z \<equiv> "(\<Sum>i\<in>Basis. (real (q (b' i)) / real p) *\<^sub>R i)::'a"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3351
  have "\<exists>i\<in>Basis. d / real n \<le> abs((f z - z)\<bullet>i)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3352
  proof (rule ccontr)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3353
    have "\<forall>i\<in>Basis. q (b' i) \<in> {0..p}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3354
      using q(1) b' by (auto intro: less_imp_le simp: bij_betw_def)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3355
    hence "z\<in>{0..\<Sum>Basis}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3356
      unfolding z_def mem_interval using b'_Basis
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3357
      by (auto simp add: inner_simps bij_betw_def zero_le_divide_iff divide_le_eq_1)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3358
    hence d_fz_z:"d \<le> norm (f z - z)" by (rule d)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3359
    case goal1
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3360
    hence as: "\<forall>i\<in>Basis. \<bar>f z \<bullet> i - z \<bullet> i\<bar> < d / real n"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3361
      using `n > 0` by (auto simp add: not_le inner_simps)
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3362
    have "norm (f z - z) \<le> (\<Sum>i\<in>Basis. \<bar>f z \<bullet> i - z \<bullet> i\<bar>)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3363
      unfolding inner_diff_left[symmetric] by(rule norm_le_l1)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3364
    also have "\<dots> < (\<Sum>(i::'a) \<in> Basis. d / real n)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3365
      apply (rule setsum_strict_mono)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3366
      using as apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3367
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3368
    also have "\<dots> = d"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3369
      using DIM_positive[where 'a='a] by (auto simp: real_eq_of_nat n_def)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3370
    finally show False using d_fz_z by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3371
  qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3372
  then guess i .. note i = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3373
  have *: "b' i \<in> {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3374
    using i using b'[unfolded bij_betw_def] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3375
  guess r using q(2)[rule_format,OF *] ..
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3376
  then guess s by (elim exE conjE) note rs = this[rule_format]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3377
  have b'_im: "\<And>i. i \<in> Basis \<Longrightarrow>  b' i \<in> {1..n}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3378
    using b' unfolding bij_betw_def by auto
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3379
  def r' \<equiv> "(\<Sum>i\<in>Basis. (real (r (b' i)) / real p) *\<^sub>R i)::'a"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3380
  have "\<And>i. i \<in> Basis \<Longrightarrow> r (b' i) \<le> p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3381
    apply (rule order_trans)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3382
    apply (rule rs(1)[OF b'_im,THEN conjunct2])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3383
    using q(1)[rule_format,OF b'_im]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3384
    apply (auto simp add: Suc_le_eq)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3385
    done
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3386
  hence "r' \<in> {0..\<Sum>Basis}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3387
    unfolding r'_def mem_interval using b'_Basis
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3388
    by (auto simp add: inner_simps bij_betw_def zero_le_divide_iff divide_le_eq_1)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3389
  def s' \<equiv> "(\<Sum>i\<in>Basis. (real (s (b' i)) / real p) *\<^sub>R i)::'a"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3390
  have "\<And>i. i\<in>Basis \<Longrightarrow> s (b' i) \<le> p"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3391
    apply (rule order_trans)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3392
    apply (rule rs(2)[OF b'_im, THEN conjunct2])
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3393
    using q(1)[rule_format,OF b'_im]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3394
    apply (auto simp add: Suc_le_eq)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3395
    done
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3396
  hence "s' \<in> {0..\<Sum>Basis}"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3397
    unfolding s'_def mem_interval using b'_Basis
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3398
    by (auto simp add: inner_simps bij_betw_def zero_le_divide_iff divide_le_eq_1)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3399
  have "z \<in> {0..\<Sum>Basis}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3400
    unfolding z_def mem_interval using b'_Basis q(1)[rule_format,OF b'_im] `p>0`
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3401
    by (auto simp add: inner_simps bij_betw_def zero_le_divide_iff divide_le_eq_1 less_imp_le)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3402
  have *: "\<And>x. 1 + real x = real (Suc x)" by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3403
  { have "(\<Sum>i\<in>Basis. \<bar>real (r (b' i)) - real (q (b' i))\<bar>) \<le> (\<Sum>(i::'a)\<in>Basis. 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3404
      apply (rule setsum_mono)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3405
      using rs(1)[OF b'_im]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3406
      apply (auto simp add:* field_simps)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3407
      done
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3408
    also have "\<dots> < e * real p" using p `e>0` `p>0`
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3409
      by (auto simp add: field_simps n_def real_of_nat_def)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3410
    finally have "(\<Sum>i\<in>Basis. \<bar>real (r (b' i)) - real (q (b' i))\<bar>) < e * real p" .
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3411
  }
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3412
  moreover
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3413
  { have "(\<Sum>i\<in>Basis. \<bar>real (s (b' i)) - real (q (b' i))\<bar>) \<le> (\<Sum>(i::'a)\<in>Basis. 1)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3414
      apply (rule setsum_mono)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3415
      using rs(2)[OF b'_im]
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3416
      apply (auto simp add:* field_simps)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3417
      done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3418
    also have "\<dots> < e * real p" using p `e > 0` `p > 0`
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3419
      by (auto simp add: field_simps n_def real_of_nat_def)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3420
    finally have "(\<Sum>i\<in>Basis. \<bar>real (s (b' i)) - real (q (b' i))\<bar>) < e * real p" .
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3421
  }
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3422
  ultimately
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3423
  have "norm (r' - z) < e" "norm (s' - z) < e"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3424
    unfolding r'_def s'_def z_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3425
    using `p>0`
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3426
    apply (rule_tac[!] le_less_trans[OF norm_le_l1])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3427
    apply (auto simp add: field_simps setsum_divide_distrib[symmetric] inner_diff_left)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3428
    done
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3429
  hence "\<bar>(f z - z) \<bullet> i\<bar> < d / real n"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3430
    using rs(3) i unfolding r'_def[symmetric] s'_def[symmetric] o_def bb'
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3431
    by (intro e(2)[OF `r'\<in>{0..\<Sum>Basis}` `s'\<in>{0..\<Sum>Basis}` `z\<in>{0..\<Sum>Basis}`]) auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3432
  thus False using i by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3433
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3434
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3435
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3436
subsection {* Retractions. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3437
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3438
definition "retraction s t r \<longleftrightarrow>
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3439
  t \<subseteq> s \<and> continuous_on s r \<and> (r ` s \<subseteq> t) \<and> (\<forall>x\<in>t. r x = x)"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3440
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3441
definition retract_of (infixl "retract'_of" 12)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3442
  where "(t retract_of s) \<longleftrightarrow> (\<exists>r. retraction s t r)"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3443
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3444
lemma retraction_idempotent: "retraction s t r \<Longrightarrow> x \<in> s \<Longrightarrow>  r(r x) = r x"
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3445
  unfolding retraction_def by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3446
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3447
subsection {*preservation of fixpoints under (more general notion of) retraction. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3448
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3449
lemma invertible_fixpoint_property:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3450
  fixes s :: "('a::euclidean_space) set"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3451
    and t :: "('b::euclidean_space) set"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3452
  assumes "continuous_on t i" "i ` t \<subseteq> s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3453
    "continuous_on s r" "r ` s \<subseteq> t"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3454
    "\<forall>y\<in>t. r (i y) = y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3455
    "\<forall>f. continuous_on s f \<and> f ` s \<subseteq> s \<longrightarrow> (\<exists>x\<in>s. f x = x)" "continuous_on t g" "g ` t \<subseteq> t"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3456
  obtains y where "y\<in>t" "g y = y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3457
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3458
  have "\<exists>x\<in>s. (i \<circ> g \<circ> r) x = x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3459
    apply (rule assms(6)[rule_format], rule)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3460
    apply (rule continuous_on_compose assms)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3461
    apply ((rule continuous_on_subset)?,rule assms)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3462
    using assms(2,4,8) unfolding image_compose
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3463
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3464
    apply blast
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3465
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3466
  then guess x .. note x = this
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3467
  hence *: "g (r x) \<in> t" using assms(4,8) by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3468
  have "r ((i \<circ> g \<circ> r) x) = r x" using x by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3469
  thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3470
    apply (rule_tac that[of "r x"])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3471
    using x unfolding o_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3472
    unfolding assms(5)[rule_format,OF *] using assms(4)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3473
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3474
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3475
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3476
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3477
lemma homeomorphic_fixpoint_property:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3478
  fixes s :: "('a::euclidean_space) set"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3479
    and t :: "('b::euclidean_space) set"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3480
  assumes "s homeomorphic t"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3481
  shows "(\<forall>f. continuous_on s f \<and> f ` s \<subseteq> s \<longrightarrow> (\<exists>x\<in>s. f x = x)) \<longleftrightarrow>
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3482
    (\<forall>g. continuous_on t g \<and> g ` t \<subseteq> t \<longrightarrow> (\<exists>y\<in>t. g y = y))"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3483
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3484
  guess r using assms[unfolded homeomorphic_def homeomorphism_def] ..
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3485
  then guess i ..
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3486
  thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3487
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3488
    apply rule
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3489
    apply (rule_tac[!] allI impI)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3490
    apply (rule_tac g=g in invertible_fixpoint_property[of t i s r])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3491
    prefer 10
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3492
    apply (rule_tac g=f in invertible_fixpoint_property[of s r t i])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3493
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3494
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3495
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3496
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3497
lemma retract_fixpoint_property:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3498
  fixes f :: "'a::euclidean_space => 'b::euclidean_space" and s::"'a set"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3499
  assumes "t retract_of s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3500
    "\<forall>f. continuous_on s f \<and> f ` s \<subseteq> s \<longrightarrow> (\<exists>x\<in>s. f x = x)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3501
    "continuous_on t g" "g ` t \<subseteq> t"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3502
  obtains y where "y \<in> t" "g y = y"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3503
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3504
  guess h using assms(1) unfolding retract_of_def ..
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3505
  thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3506
    unfolding retraction_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3507
    apply -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3508
    apply (rule invertible_fixpoint_property[OF continuous_on_id _ _ _ _ assms(2), of t h g])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3509
    prefer 7
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3510
    apply (rule_tac y = y in that)
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3511
    using assms
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3512
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3513
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3514
qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3515
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3516
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3517
subsection {*So the Brouwer theorem for any set with nonempty interior. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3518
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3519
lemma brouwer_weak:
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3520
  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'a::ordered_euclidean_space"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3521
  assumes "compact s" "convex s" "interior s \<noteq> {}" "continuous_on s f" "f ` s \<subseteq> s"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3522
  obtains x where "x \<in> s" "f x = x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3523
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3524
  have *: "interior {0::'a..\<Sum>Basis} \<noteq> {}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3525
    unfolding interior_closed_interval interval_eq_empty by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3526
  have *: "{0::'a..\<Sum>Basis} homeomorphic s"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3527
    using homeomorphic_convex_compact[OF convex_interval(1) compact_interval * assms(2,1,3)] .
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3528
  have "\<forall>f. continuous_on {0::'a..\<Sum>Basis} f \<and> f ` {0::'a..\<Sum>Basis} \<subseteq> {0::'a..\<Sum>Basis} \<longrightarrow>
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3529
    (\<exists>x\<in>{0::'a..\<Sum>Basis}. f x = x)"
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3530
    using brouwer_cube by auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3531
  thus ?thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3532
    unfolding homeomorphic_fixpoint_property[OF *]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3533
    apply (erule_tac x=f in allE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3534
    apply (erule impE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3535
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3536
    apply (erule bexE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3537
    apply (rule_tac x=y in that)
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3538
    using assms
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3539
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3540
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3541
qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3542
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3543
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3544
subsection {* And in particular for a closed ball. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3545
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3546
lemma brouwer_ball:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3547
  fixes f :: "'a::ordered_euclidean_space \<Rightarrow> 'a"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3548
  assumes "0 < e" "continuous_on (cball a e) f" "f ` (cball a e) \<subseteq> cball a e"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3549
  obtains x where "x \<in> cball a e" "f x = x"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3550
  using brouwer_weak[OF compact_cball convex_cball, of a e f]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3551
  unfolding interior_cball ball_eq_empty
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3552
  using assms by auto
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3553
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3554
text {*Still more general form; could derive this directly without using the
36334
068a01b4bc56 document generation for Multivariate_Analysis
huffman
parents: 36318
diff changeset
  3555
  rather involved @{text "HOMEOMORPHIC_CONVEX_COMPACT"} theorem, just using
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3556
  a scaling and translation to put the set inside the unit cube. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3557
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3558
lemma brouwer:
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3559
  fixes f::"'a::ordered_euclidean_space \<Rightarrow> 'a"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3560
  assumes "compact s" "convex s" "s \<noteq> {}" "continuous_on s f" "f ` s \<subseteq> s"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3561
  obtains x where "x \<in> s" "f x = x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3562
proof -
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3563
  have "\<exists>e>0. s \<subseteq> cball 0 e"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3564
    using compact_imp_bounded[OF assms(1)] unfolding bounded_pos
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3565
    apply (erule_tac exE, rule_tac x=b in exI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3566
    apply (auto simp add: dist_norm)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3567
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3568
  then guess e by (elim exE conjE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3569
  note e = this
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3570
  have "\<exists>x\<in> cball 0 e. (f \<circ> closest_point s) x = x"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3571
    apply (rule_tac brouwer_ball[OF e(1), of 0 "f \<circ> closest_point s"])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3572
    apply (rule continuous_on_compose )
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3573
    apply (rule continuous_on_closest_point[OF assms(2) compact_imp_closed[OF assms(1)] assms(3)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3574
    apply (rule continuous_on_subset[OF assms(4)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3575
    apply (insert closest_point_in_set[OF compact_imp_closed[OF assms(1)] assms(3)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3576
    defer
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3577
    using assms(5)[unfolded subset_eq]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3578
    using e(2)[unfolded subset_eq mem_cball]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3579
    apply (auto simp add: dist_norm)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3580
    done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3581
  then guess x .. note x=this
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3582
  have *: "closest_point s x = x"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3583
    apply (rule closest_point_self)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3584
    apply (rule assms(5)[unfolded subset_eq,THEN bspec[where x="x"], unfolded image_iff])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3585
    apply (rule_tac x="closest_point s x" in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3586
    using x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3587
    unfolding o_def
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3588
    using closest_point_in_set[OF compact_imp_closed[OF assms(1)] assms(3), of x]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3589
    apply auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3590
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3591
  show thesis
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3592
    apply (rule_tac x="closest_point s x" in that)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3593
    unfolding x(2)[unfolded o_def]
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3594
    apply (rule closest_point_in_set[OF compact_imp_closed[OF assms(1)] assms(3)])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3595
    using * by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3596
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3597
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3598
text {*So we get the no-retraction theorem. *}
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3599
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3600
lemma no_retraction_cball:
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3601
  assumes "0 < e"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3602
  fixes type :: "'a::ordered_euclidean_space"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3603
  shows "\<not> (frontier(cball a e) retract_of (cball (a::'a) e))"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3604
proof
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3605
  case goal1
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3606
  have *:"\<And>xa. a - (2 *\<^sub>R a - xa) = -(a - xa)"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3607
    using scaleR_left_distrib[of 1 1 a] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3608
  guess x
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3609
    apply (rule retract_fixpoint_property[OF goal1, of "\<lambda>x. scaleR 2 a - x"])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3610
    apply (rule,rule,erule conjE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3611
    apply (rule brouwer_ball[OF assms])
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3612
    apply assumption+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3613
    apply (rule_tac x=x in bexI)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3614
    apply assumption+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3615
    apply (rule continuous_on_intros)+
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3616
    unfolding frontier_cball subset_eq Ball_def image_iff
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3617
    apply (rule,rule,erule bexE)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3618
    unfolding dist_norm
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3619
    apply (simp add: * norm_minus_commute)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3620
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3621
  note x = this
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3622
  hence "scaleR 2 a = scaleR 1 x + scaleR 1 x"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3623
    by (auto simp add: algebra_simps)
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3624
  hence "a = x" unfolding scaleR_left_distrib[symmetric] by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3625
  thus False using x assms by auto
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3626
qed
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3627
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3628
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3629
subsection {*Bijections between intervals. *}
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3630
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3631
definition interval_bij :: "'a \<times> 'a \<Rightarrow> 'a \<times> 'a \<Rightarrow> 'a \<Rightarrow> 'a::ordered_euclidean_space"
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3632
  where "interval_bij =
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3633
    (\<lambda>(a, b) (u, v) x. (\<Sum>i\<in>Basis. (u\<bullet>i + (x\<bullet>i - a\<bullet>i) / (b\<bullet>i - a\<bullet>i) * (v\<bullet>i - u\<bullet>i)) *\<^sub>R i))"
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3634
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3635
lemma interval_bij_affine:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3636
  "interval_bij (a,b) (u,v) = (\<lambda>x. (\<Sum>i\<in>Basis. ((v\<bullet>i - u\<bullet>i) / (b\<bullet>i - a\<bullet>i) * (x\<bullet>i)) *\<^sub>R i) +
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3637
    (\<Sum>i\<in>Basis. (u\<bullet>i - (v\<bullet>i - u\<bullet>i) / (b\<bullet>i - a\<bullet>i) * (a\<bullet>i)) *\<^sub>R i))"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3638
  by (auto simp: setsum_addf[symmetric] scaleR_add_left[symmetric] interval_bij_def fun_eq_iff
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3639
    field_simps inner_simps add_divide_distrib[symmetric] intro!: setsum_cong)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3640
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3641
lemma continuous_interval_bij:
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3642
  "continuous (at x) (interval_bij (a,b::'a::ordered_euclidean_space) (u,v::'a))"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3643
  by (auto simp add: divide_inverse interval_bij_def intro!: continuous_setsum continuous_intros)
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3644
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3645
lemma continuous_on_interval_bij: "continuous_on s (interval_bij (a,b) (u,v))"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3646
  apply(rule continuous_at_imp_continuous_on)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3647
  apply (rule, rule continuous_interval_bij)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3648
  done
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3649
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3650
lemma in_interval_interval_bij:
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3651
  fixes a b u v x :: "'a::ordered_euclidean_space"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3652
  assumes "x \<in> {a..b}" "{u..v} \<noteq> {}"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3653
  shows "interval_bij (a,b) (u,v) x \<in> {u..v}"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3654
  apply (simp only: interval_bij_def split_conv mem_interval inner_setsum_left_Basis cong: ball_cong)
53248
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3655
  apply safe
7a4b4b3b9ecd tuned proofs;
wenzelm
parents: 53186
diff changeset
  3656
proof -
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3657
  fix i :: 'a
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3658
  assume i: "i \<in> Basis"
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3659
  have "{a..b} \<noteq> {}" using assms by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3660
  with i have *: "a\<bullet>i \<le> b\<bullet>i" "u\<bullet>i \<le> v\<bullet>i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3661
    using assms(2) by (auto simp add: interval_eq_empty not_less)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3662
  have x: "a\<bullet>i\<le>x\<bullet>i" "x\<bullet>i\<le>b\<bullet>i"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3663
    using assms(1)[unfolded mem_interval] using i by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3664
  have "0 \<le> (x \<bullet> i - a \<bullet> i) / (b \<bullet> i - a \<bullet> i) * (v \<bullet> i - u \<bullet> i)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3665
    using * x by (auto intro!: mult_nonneg_nonneg divide_nonneg_nonneg)
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3666
  thus "u \<bullet> i \<le> u \<bullet> i + (x \<bullet> i - a \<bullet> i) / (b \<bullet> i - a \<bullet> i) * (v \<bullet> i - u \<bullet> i)"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3667
    using * by auto
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3668
  have "((x \<bullet> i - a \<bullet> i) / (b \<bullet> i - a \<bullet> i)) * (v \<bullet> i - u \<bullet> i) \<le> 1 * (v \<bullet> i - u \<bullet> i)"
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3669
    apply (rule mult_right_mono)
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3670
    unfolding divide_le_eq_1
53252
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3671
    using * x
4766fbe322b5 tuned proofs;
wenzelm
parents: 53248
diff changeset
  3672
    apply auto
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3673
    done
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3674
  thus "u \<bullet> i + (x \<bullet> i - a \<bullet> i) / (b \<bullet> i - a \<bullet> i) * (v \<bullet> i - u \<bullet> i) \<le> v \<bullet> i"
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3675
    using * by auto
37489
44e42d392c6e Introduce a type class for euclidean spaces, port most lemmas from real^'n to this type class.
hoelzl
parents: 36587
diff changeset
  3676
qed
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3677
53185
752e05d09708 tuned proofs;
wenzelm
parents: 51478
diff changeset
  3678
lemma interval_bij_bij:
50526
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3679
  "\<forall>(i::'a::ordered_euclidean_space)\<in>Basis. a\<bullet>i < b\<bullet>i \<and> u\<bullet>i < v\<bullet>i \<Longrightarrow>
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3680
    interval_bij (a,b) (u,v) (interval_bij (u,v) (a,b) x) = x"
899c9c4e4a4c Remove the indexed basis from the definition of euclidean spaces and only use the set of Basis vectors
hoelzl
parents: 50514
diff changeset
  3681
  by (auto simp: interval_bij_def euclidean_eq_iff[where 'a='a])
33741
4c414d0835ab Added derivation and Brouwer's fixpoint theorem in Multivariate Analysis (translated by Robert Himmelmann from HOL-light)
hoelzl
parents:
diff changeset
  3682
34291
4e896680897e finite annotation on cartesian product is now implicit.
hoelzl
parents: 34289
diff changeset
  3683
end