src/HOL/SMT_Examples/SMT_Tests.thy
changeset 49995 3b7ad6153322
parent 49834 b27bbb021df1
child 50662 b1f4291eb916
equal deleted inserted replaced
49994:ceceb403eb4e 49995:3b7ad6153322
   124   "(\<exists>x. P x) \<and> R \<longleftrightarrow> (\<exists>x. P x \<and> R)"
   124   "(\<exists>x. P x) \<and> R \<longleftrightarrow> (\<exists>x. P x \<and> R)"
   125   "(\<exists>x y z. S x z) \<longleftrightarrow> (\<exists>x z. S x z)"
   125   "(\<exists>x y z. S x z) \<longleftrightarrow> (\<exists>x z. S x z)"
   126   "\<not>((\<exists>x. \<not>P x) \<and> ((\<exists>x. P x) \<or> (\<exists>x. P x \<and> Q x)) \<and> \<not>(\<exists>x. P x))"
   126   "\<not>((\<exists>x. \<not>P x) \<and> ((\<exists>x. P x) \<or> (\<exists>x. P x \<and> Q x)) \<and> \<not>(\<exists>x. P x))"
   127   by smt+
   127   by smt+
   128 
   128 
   129 lemma  (* only without proofs: *)
   129 lemma
   130   "\<exists>x y. x = y"
   130   "\<exists>x y. x = y"
   131   "\<exists>x. P x \<longrightarrow> (\<exists>y. P x \<and> P y)"
   131   "\<exists>x. P x \<longrightarrow> (\<exists>y. P x \<and> P y)"
   132   "(\<exists>x. P x) \<or> R \<longleftrightarrow> (\<exists>x. P x \<or> R)"
   132   "(\<exists>x. P x) \<or> R \<longleftrightarrow> (\<exists>x. P x \<or> R)"
   133   "\<exists>x. P x \<longrightarrow> P a \<and> P b"
   133   "\<exists>x. P x \<longrightarrow> P a \<and> P b"
   134   "\<exists>x. (\<exists>y. P y) \<longrightarrow> P x" 
   134   "\<exists>x. (\<exists>y. P y) \<longrightarrow> P x"
   135   "(\<exists>x. Q \<longrightarrow> P x) \<longleftrightarrow> (Q \<longrightarrow> (\<exists>x. P x))"
   135   "(\<exists>x. Q \<longrightarrow> P x) \<longleftrightarrow> (Q \<longrightarrow> (\<exists>x. P x))"
   136   using [[smt_oracle=true, z3_options="AUTO_CONFIG=false SATURATE=true"]]
   136 by smt+
   137   by smt+
       
   138 
   137 
   139 lemma
   138 lemma
   140   "(\<not>(\<exists>x. P x)) \<longleftrightarrow> (\<forall>x. \<not> P x)"
   139   "(\<not>(\<exists>x. P x)) \<longleftrightarrow> (\<forall>x. \<not> P x)"
   141   "(\<exists>x. P x \<longrightarrow> Q) \<longleftrightarrow> (\<forall>x. P x) \<longrightarrow> Q"
   140   "(\<exists>x. P x \<longrightarrow> Q) \<longleftrightarrow> (\<forall>x. P x) \<longrightarrow> Q"
   142   "(\<forall>x y. R x y = x) \<longrightarrow> (\<exists>y. R x y) = R x c"
   141   "(\<forall>x y. R x y = x) \<longrightarrow> (\<exists>y. R x y) = R x c"
   143   "(if P x then \<not>(\<exists>y. P y) else (\<forall>y. \<not>P y)) \<longrightarrow> P x \<longrightarrow> P y"
   142   "(if P x then \<not>(\<exists>y. P y) else (\<forall>y. \<not>P y)) \<longrightarrow> P x \<longrightarrow> P y"
   144   "(\<forall>x y. R x y = x) \<and> (\<forall>x. \<exists>y. R x y) = (\<forall>x. R x c) \<longrightarrow> (\<exists>y. R x y) = R x c"
   143   "(\<forall>x y. R x y = x) \<and> (\<forall>x. \<exists>y. R x y) = (\<forall>x. R x c) \<longrightarrow> (\<exists>y. R x y) = R x c"
   145   by smt+
   144   by smt+
   146 
   145 
   147 lemma  (* only without proofs: *)
   146 lemma
   148   "\<forall>x. \<exists>y. f x y = f x (g x)"
   147   "\<forall>x. \<exists>y. f x y = f x (g x)"
   149   "(\<not>\<not>(\<exists>x. P x)) \<longleftrightarrow> (\<not>(\<forall>x. \<not> P x))"
   148   "(\<not>\<not>(\<exists>x. P x)) \<longleftrightarrow> (\<not>(\<forall>x. \<not> P x))"
   150   "\<forall>u. \<exists>v. \<forall>w. \<exists>x. f u v w x = f u (g u) w (h u w)"
   149   "\<forall>u. \<exists>v. \<forall>w. \<exists>x. f u v w x = f u (g u) w (h u w)"
   151   "\<exists>x. if x = y then (\<forall>y. y = x \<or> y \<noteq> x) else (\<forall>y. y = (x, x) \<or> y \<noteq> (x, x))"
   150   "\<exists>x. if x = y then (\<forall>y. y = x \<or> y \<noteq> x) else (\<forall>y. y = (x, x) \<or> y \<noteq> (x, x))"
   152   "\<exists>x. if x = y then (\<exists>y. y = x \<or> y \<noteq> x) else (\<exists>y. y = (x, x) \<or> y \<noteq> (x, x))"
   151   "\<exists>x. if x = y then (\<exists>y. y = x \<or> y \<noteq> x) else (\<exists>y. y = (x, x) \<or> y \<noteq> (x, x))"
   153   "(\<exists>x. \<forall>y. P x \<longleftrightarrow> P y) \<longrightarrow> ((\<exists>x. P x) \<longleftrightarrow> (\<forall>y. P y))"
   152   "(\<exists>x. \<forall>y. P x \<longleftrightarrow> P y) \<longrightarrow> ((\<exists>x. P x) \<longleftrightarrow> (\<forall>y. P y))"
   154   "\<exists>z. P z \<longrightarrow> (\<forall>x. P x)"
   153   "\<exists>z. P z \<longrightarrow> (\<forall>x. P x)"
   155   "(\<exists>y. \<forall>x. R x y) \<longrightarrow> (\<forall>x. \<exists>y. R x y)"
   154   "(\<exists>y. \<forall>x. R x y) \<longrightarrow> (\<forall>x. \<exists>y. R x y)"
   156   using [[smt_oracle=true]]
       
   157   by smt+
   155   by smt+
   158 
   156 
   159 lemma
   157 lemma
   160   "(\<exists>! x. P x) \<longrightarrow> (\<exists>x. P x)"
   158   "(\<exists>! x. P x) \<longrightarrow> (\<exists>x. P x)"
   161   "(\<exists>!x. P x) \<longleftrightarrow> (\<exists>x. P x \<and> (\<forall>y. y \<noteq> x \<longrightarrow> \<not>P y))"
   159   "(\<exists>!x. P x) \<longleftrightarrow> (\<exists>x. P x \<and> (\<forall>y. y \<noteq> x \<longrightarrow> \<not>P y))"
   561   "-(x::real) < 0 \<longleftrightarrow> x > 0"
   559   "-(x::real) < 0 \<longleftrightarrow> x > 0"
   562   "x > 0 \<longrightarrow> -x < 0"
   560   "x > 0 \<longrightarrow> -x < 0"
   563   "x < 0 \<longrightarrow> -x > 0"
   561   "x < 0 \<longrightarrow> -x > 0"
   564   by smt+
   562   by smt+
   565 
   563 
   566 lemma 
   564 lemma
   567   "(x::real) - 0 = x"
   565   "(x::real) - 0 = x"
   568   "0 - x = -x"
   566   "0 - x = -x"
   569   "x < y \<longrightarrow> x - y < 0"
   567   "x < y \<longrightarrow> x - y < 0"
   570   "x - y = -(y - x)"
   568   "x - y = -(y - x)"
   571   "x - y = -y + x"
   569   "x - y = -y + x"