src/HOL/Decision_Procs/Parametric_Ferrante_Rackoff.thy
changeset 48562 f6d6d58fa318
parent 47108 2a1953f0d20d
child 49962 a8cc904a6820
equal deleted inserted replaced
48561:12aa0cb2b447 48562:f6d6d58fa318
  1049   apply (case_tac poly, auto)
  1049   apply (case_tac poly, auto)
  1050   done
  1050   done
  1051 
  1051 
  1052 lemma simplt_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1052 lemma simplt_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1053   shows "tmbound0 t \<Longrightarrow> bound0 (simplt t)"
  1053   shows "tmbound0 t \<Longrightarrow> bound0 (simplt t)"
  1054   using split0 [of "simptm t" vs bs]
  1054   using split0 [of "simptm t" "vs::'a list" bs]
  1055 proof(simp add: simplt_def Let_def split_def)
  1055 proof(simp add: simplt_def Let_def split_def)
  1056   assume nb: "tmbound0 t"
  1056   assume nb: "tmbound0 t"
  1057   hence nb': "tmbound0 (simptm t)" by simp
  1057   hence nb': "tmbound0 (simptm t)" by simp
  1058   let ?c = "fst (split0 (simptm t))"
  1058   let ?c = "fst (split0 (simptm t))"
  1059   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1059   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1066        fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def lt_nb)
  1066        fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def lt_nb)
  1067 qed
  1067 qed
  1068 
  1068 
  1069 lemma simple_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1069 lemma simple_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1070   shows "tmbound0 t \<Longrightarrow> bound0 (simple t)"
  1070   shows "tmbound0 t \<Longrightarrow> bound0 (simple t)"
  1071   using split0 [of "simptm t" vs bs]
  1071   using split0 [of "simptm t" "vs::'a list" bs]
  1072 proof(simp add: simple_def Let_def split_def)
  1072 proof(simp add: simple_def Let_def split_def)
  1073   assume nb: "tmbound0 t"
  1073   assume nb: "tmbound0 t"
  1074   hence nb': "tmbound0 (simptm t)" by simp
  1074   hence nb': "tmbound0 (simptm t)" by simp
  1075   let ?c = "fst (split0 (simptm t))"
  1075   let ?c = "fst (split0 (simptm t))"
  1076   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1076   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1083        fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def le_nb)
  1083        fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simplt_def Let_def split_def le_nb)
  1084 qed
  1084 qed
  1085 
  1085 
  1086 lemma simpeq_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1086 lemma simpeq_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1087   shows "tmbound0 t \<Longrightarrow> bound0 (simpeq t)"
  1087   shows "tmbound0 t \<Longrightarrow> bound0 (simpeq t)"
  1088   using split0 [of "simptm t" vs bs]
  1088   using split0 [of "simptm t" "vs::'a list" bs]
  1089 proof(simp add: simpeq_def Let_def split_def)
  1089 proof(simp add: simpeq_def Let_def split_def)
  1090   assume nb: "tmbound0 t"
  1090   assume nb: "tmbound0 t"
  1091   hence nb': "tmbound0 (simptm t)" by simp
  1091   hence nb': "tmbound0 (simptm t)" by simp
  1092   let ?c = "fst (split0 (simptm t))"
  1092   let ?c = "fst (split0 (simptm t))"
  1093   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1093   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1100        fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simpeq_def Let_def split_def eq_nb)
  1100        fst (split0 (simptm t)) = 0\<^sub>p" by (simp add: simpeq_def Let_def split_def eq_nb)
  1101 qed
  1101 qed
  1102 
  1102 
  1103 lemma simpneq_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1103 lemma simpneq_nb[simp]:   assumes "SORT_CONSTRAINT('a::{field_char_0, field_inverse_zero})"
  1104   shows "tmbound0 t \<Longrightarrow> bound0 (simpneq t)"
  1104   shows "tmbound0 t \<Longrightarrow> bound0 (simpneq t)"
  1105   using split0 [of "simptm t" vs bs]
  1105   using split0 [of "simptm t" "vs::'a list" bs]
  1106 proof(simp add: simpneq_def Let_def split_def)
  1106 proof(simp add: simpneq_def Let_def split_def)
  1107   assume nb: "tmbound0 t"
  1107   assume nb: "tmbound0 t"
  1108   hence nb': "tmbound0 (simptm t)" by simp
  1108   hence nb': "tmbound0 (simptm t)" by simp
  1109   let ?c = "fst (split0 (simptm t))"
  1109   let ?c = "fst (split0 (simptm t))"
  1110   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]
  1110   from tmbound_split0[OF nb'[unfolded tmbound0_tmbound_iff[symmetric]]]