src/HOL/Integ/Presburger.thy
changeset 22744 5cbe966d67a2
parent 22394 54ea68b5a92f
child 22801 caffcb450ef4
equal deleted inserted replaced
22743:e2b06bfe471a 22744:5cbe966d67a2
  1067 *}
  1067 *}
  1068 
  1068 
  1069 lemma eq_number_of [code func]:
  1069 lemma eq_number_of [code func]:
  1070   "((number_of k)\<Colon>int) = number_of l \<longleftrightarrow> k = l"
  1070   "((number_of k)\<Colon>int) = number_of l \<longleftrightarrow> k = l"
  1071   unfolding number_of_is_id ..
  1071   unfolding number_of_is_id ..
       
  1072 
  1072 lemma eq_Pls_Pls:
  1073 lemma eq_Pls_Pls:
  1073   "Numeral.Pls = Numeral.Pls" ..
  1074   "Numeral.Pls = Numeral.Pls \<longleftrightarrow> True" by rule+
  1074 
  1075 
  1075 lemma eq_Pls_Min:
  1076 lemma eq_Pls_Min:
  1076   "Numeral.Pls \<noteq> Numeral.Min"
  1077   "Numeral.Pls = Numeral.Min \<longleftrightarrow> False"
  1077   unfolding Pls_def Min_def by auto
  1078   unfolding Pls_def Min_def by auto
  1078 
  1079 
  1079 lemma eq_Pls_Bit0:
  1080 lemma eq_Pls_Bit0:
  1080   "Numeral.Pls = Numeral.Bit k bit.B0 \<longleftrightarrow> Numeral.Pls = k"
  1081   "Numeral.Pls = Numeral.Bit k bit.B0 \<longleftrightarrow> Numeral.Pls = k"
  1081   unfolding Pls_def Bit_def bit.cases by auto
  1082   unfolding Pls_def Bit_def bit.cases by auto
  1082 
  1083 
  1083 lemma eq_Pls_Bit1:
  1084 lemma eq_Pls_Bit1:
  1084   "Numeral.Pls \<noteq> Numeral.Bit k bit.B1"
  1085   "Numeral.Pls = Numeral.Bit k bit.B1 \<longleftrightarrow> False"
  1085   unfolding Pls_def Bit_def bit.cases by arith
  1086   unfolding Pls_def Bit_def bit.cases by arith
  1086 
  1087 
  1087 lemma eq_Min_Pls:
  1088 lemma eq_Min_Pls:
  1088   "Numeral.Min \<noteq> Numeral.Pls"
  1089   "Numeral.Min = Numeral.Pls \<longleftrightarrow> False"
  1089   unfolding Pls_def Min_def by auto
  1090   unfolding Pls_def Min_def by auto
  1090 
  1091 
  1091 lemma eq_Min_Min:
  1092 lemma eq_Min_Min:
  1092   "Numeral.Min = Numeral.Min" ..
  1093   "Numeral.Min = Numeral.Min \<longleftrightarrow> True" by rule+
  1093 
  1094 
  1094 lemma eq_Min_Bit0:
  1095 lemma eq_Min_Bit0:
  1095   "Numeral.Min \<noteq> Numeral.Bit k bit.B0"
  1096   "Numeral.Min = Numeral.Bit k bit.B0 \<longleftrightarrow> False"
  1096   unfolding Min_def Bit_def bit.cases by arith
  1097   unfolding Min_def Bit_def bit.cases by arith
  1097 
  1098 
  1098 lemma eq_Min_Bit1:
  1099 lemma eq_Min_Bit1:
  1099   "Numeral.Min = Numeral.Bit k bit.B1 \<longleftrightarrow> Numeral.Min = k"
  1100   "Numeral.Min = Numeral.Bit k bit.B1 \<longleftrightarrow> Numeral.Min = k"
  1100   unfolding Min_def Bit_def bit.cases by auto
  1101   unfolding Min_def Bit_def bit.cases by auto
  1102 lemma eq_Bit0_Pls:
  1103 lemma eq_Bit0_Pls:
  1103   "Numeral.Bit k bit.B0 = Numeral.Pls \<longleftrightarrow> Numeral.Pls = k"
  1104   "Numeral.Bit k bit.B0 = Numeral.Pls \<longleftrightarrow> Numeral.Pls = k"
  1104   unfolding Pls_def Bit_def bit.cases by auto
  1105   unfolding Pls_def Bit_def bit.cases by auto
  1105 
  1106 
  1106 lemma eq_Bit1_Pls:
  1107 lemma eq_Bit1_Pls:
  1107   "Numeral.Bit k bit.B1 \<noteq>  Numeral.Pls"
  1108   "Numeral.Bit k bit.B1 = Numeral.Pls \<longleftrightarrow> False"
  1108   unfolding Pls_def Bit_def bit.cases by arith
  1109   unfolding Pls_def Bit_def bit.cases by arith
  1109 
  1110 
  1110 lemma eq_Bit0_Min:
  1111 lemma eq_Bit0_Min:
  1111   "Numeral.Bit k bit.B0 \<noteq> Numeral.Min"
  1112   "Numeral.Bit k bit.B0 = Numeral.Min \<longleftrightarrow> False"
  1112   unfolding Min_def Bit_def bit.cases by arith
  1113   unfolding Min_def Bit_def bit.cases by arith
  1113 
  1114 
  1114 lemma eq_Bit1_Min:
  1115 lemma eq_Bit1_Min:
  1115   "(Numeral.Bit k bit.B1) = Numeral.Min \<longleftrightarrow> Numeral.Min = k"
  1116   "(Numeral.Bit k bit.B1) = Numeral.Min \<longleftrightarrow> Numeral.Min = k"
  1116   unfolding Min_def Bit_def bit.cases by auto
  1117   unfolding Min_def Bit_def bit.cases by auto
  1138 lemma less_eq_number_of [code func]:
  1139 lemma less_eq_number_of [code func]:
  1139   "(number_of k \<Colon> int) \<le> number_of l \<longleftrightarrow> k \<le> l"
  1140   "(number_of k \<Colon> int) \<le> number_of l \<longleftrightarrow> k \<le> l"
  1140   unfolding number_of_is_id ..
  1141   unfolding number_of_is_id ..
  1141 
  1142 
  1142 lemma less_eq_Pls_Pls:
  1143 lemma less_eq_Pls_Pls:
  1143   "Numeral.Pls \<le> Numeral.Pls" ..
  1144   "Numeral.Pls \<le> Numeral.Pls \<longleftrightarrow> True" by rule+
  1144 
  1145 
  1145 lemma less_eq_Pls_Min:
  1146 lemma less_eq_Pls_Min:
  1146   "\<not> (Numeral.Pls \<le> Numeral.Min)"
  1147   "Numeral.Pls \<le> Numeral.Min \<longleftrightarrow> False"
  1147   unfolding Pls_def Min_def by auto
  1148   unfolding Pls_def Min_def by auto
  1148 
  1149 
  1149 lemma less_eq_Pls_Bit:
  1150 lemma less_eq_Pls_Bit:
  1150   "Numeral.Pls \<le> Numeral.Bit k v \<longleftrightarrow> Numeral.Pls \<le> k"
  1151   "Numeral.Pls \<le> Numeral.Bit k v \<longleftrightarrow> Numeral.Pls \<le> k"
  1151   unfolding Pls_def Bit_def by (cases v) auto
  1152   unfolding Pls_def Bit_def by (cases v) auto
  1152 
  1153 
  1153 lemma less_eq_Min_Pls:
  1154 lemma less_eq_Min_Pls:
  1154   "Numeral.Min \<le> Numeral.Pls"
  1155   "Numeral.Min \<le> Numeral.Pls \<longleftrightarrow> True"
  1155   unfolding Pls_def Min_def by auto
  1156   unfolding Pls_def Min_def by auto
  1156 
  1157 
  1157 lemma less_eq_Min_Min:
  1158 lemma less_eq_Min_Min:
  1158   "Numeral.Min \<le> Numeral.Min" ..
  1159   "Numeral.Min \<le> Numeral.Min \<longleftrightarrow> True" by rule+
  1159 
  1160 
  1160 lemma less_eq_Min_Bit0:
  1161 lemma less_eq_Min_Bit0:
  1161   "Numeral.Min \<le> Numeral.Bit k bit.B0 \<longleftrightarrow> Numeral.Min < k"
  1162   "Numeral.Min \<le> Numeral.Bit k bit.B0 \<longleftrightarrow> Numeral.Min < k"
  1162   unfolding Min_def Bit_def by auto
  1163   unfolding Min_def Bit_def by auto
  1163 
  1164 
  1196 lemma less_eq_number_of [code func]:
  1197 lemma less_eq_number_of [code func]:
  1197   "(number_of k \<Colon> int) < number_of l \<longleftrightarrow> k < l"
  1198   "(number_of k \<Colon> int) < number_of l \<longleftrightarrow> k < l"
  1198   unfolding number_of_is_id ..
  1199   unfolding number_of_is_id ..
  1199 
  1200 
  1200 lemma less_Pls_Pls:
  1201 lemma less_Pls_Pls:
  1201   "\<not> (Numeral.Pls < Numeral.Pls)" by auto
  1202   "Numeral.Pls < Numeral.Pls \<longleftrightarrow> False" by auto
  1202 
  1203 
  1203 lemma less_Pls_Min:
  1204 lemma less_Pls_Min:
  1204   "\<not> (Numeral.Pls < Numeral.Min)"
  1205   "Numeral.Pls < Numeral.Min \<longleftrightarrow> False"
  1205   unfolding Pls_def Min_def by auto
  1206   unfolding Pls_def Min_def by auto
  1206 
  1207 
  1207 lemma less_Pls_Bit0:
  1208 lemma less_Pls_Bit0:
  1208   "Numeral.Pls < Numeral.Bit k bit.B0 \<longleftrightarrow> Numeral.Pls < k"
  1209   "Numeral.Pls < Numeral.Bit k bit.B0 \<longleftrightarrow> Numeral.Pls < k"
  1209   unfolding Pls_def Bit_def by auto
  1210   unfolding Pls_def Bit_def by auto
  1211 lemma less_Pls_Bit1:
  1212 lemma less_Pls_Bit1:
  1212   "Numeral.Pls < Numeral.Bit k bit.B1 \<longleftrightarrow> Numeral.Pls \<le> k"
  1213   "Numeral.Pls < Numeral.Bit k bit.B1 \<longleftrightarrow> Numeral.Pls \<le> k"
  1213   unfolding Pls_def Bit_def by auto
  1214   unfolding Pls_def Bit_def by auto
  1214 
  1215 
  1215 lemma less_Min_Pls:
  1216 lemma less_Min_Pls:
  1216   "Numeral.Min < Numeral.Pls"
  1217   "Numeral.Min < Numeral.Pls \<longleftrightarrow> True"
  1217   unfolding Pls_def Min_def by auto
  1218   unfolding Pls_def Min_def by auto
  1218 
  1219 
  1219 lemma less_Min_Min:
  1220 lemma less_Min_Min:
  1220   "\<not> (Numeral.Min < Numeral.Min)" by auto
  1221   "Numeral.Min < Numeral.Min \<longleftrightarrow> False" by auto
  1221 
  1222 
  1222 lemma less_Min_Bit:
  1223 lemma less_Min_Bit:
  1223   "Numeral.Min < Numeral.Bit k v \<longleftrightarrow> Numeral.Min < k"
  1224   "Numeral.Min < Numeral.Bit k v \<longleftrightarrow> Numeral.Min < k"
  1224   unfolding Min_def Bit_def by (auto split: bit.split)
  1225   unfolding Min_def Bit_def by (auto split: bit.split)
  1225 
  1226