143 lemma rep_minus_ivl: |
143 lemma rep_minus_ivl: |
144 "n1 : rep_ivl i1 \<Longrightarrow> n2 : rep_ivl i2 \<Longrightarrow> n1-n2 : rep_ivl(minus_ivl i1 i2)" |
144 "n1 : rep_ivl i1 \<Longrightarrow> n2 : rep_ivl i2 \<Longrightarrow> n1-n2 : rep_ivl(minus_ivl i1 i2)" |
145 by(auto simp add: minus_ivl_def rep_ivl_def split: ivl.splits option.splits) |
145 by(auto simp add: minus_ivl_def rep_ivl_def split: ivl.splits option.splits) |
146 |
146 |
147 |
147 |
148 definition "inv_plus_ivl i1 i2 i = ((*if is_empty i then empty else*) |
148 definition "filter_plus_ivl i i1 i2 = ((*if is_empty i then empty else*) |
149 i1 \<sqinter> minus_ivl i i2, i2 \<sqinter> minus_ivl i i1)" |
149 i1 \<sqinter> minus_ivl i i2, i2 \<sqinter> minus_ivl i i1)" |
150 |
150 |
151 fun inv_less_ivl :: "ivl \<Rightarrow> ivl \<Rightarrow> bool \<Rightarrow> ivl * ivl" where |
151 fun filter_less_ivl :: "bool \<Rightarrow> ivl \<Rightarrow> ivl \<Rightarrow> ivl * ivl" where |
152 "inv_less_ivl (I l1 h1) (I l2 h2) res = |
152 "filter_less_ivl res (I l1 h1) (I l2 h2) = |
153 ((*if is_empty(I l1 h1) \<or> is_empty(I l2 h2) then (empty, empty) else*) |
153 ((*if is_empty(I l1 h1) \<or> is_empty(I l2 h2) then (empty, empty) else*) |
154 if res |
154 if res |
155 then (I l1 (min_option True h1 (h2 - Some 1)), |
155 then (I l1 (min_option True h1 (h2 - Some 1)), |
156 I (max_option False (l1 + Some 1) l2) h2) |
156 I (max_option False (l1 + Some 1) l2) h2) |
157 else (I (max_option False l1 l2) h1, I l2 (min_option True h1 h2)))" |
157 else (I (max_option False l1 l2) h1, I l2 (min_option True h1 h2)))" |
177 next |
177 next |
178 case goal2 show ?case by(auto simp add: Bot_ivl_def rep_ivl_def empty_def) |
178 case goal2 show ?case by(auto simp add: Bot_ivl_def rep_ivl_def empty_def) |
179 qed |
179 qed |
180 |
180 |
181 interpretation |
181 interpretation |
182 Val_abs1 rep_ivl num_ivl plus_ivl inv_plus_ivl inv_less_ivl |
182 Val_abs1 rep_ivl num_ivl plus_ivl filter_plus_ivl filter_less_ivl |
183 proof |
183 proof |
184 case goal1 thus ?case |
184 case goal1 thus ?case |
185 by(auto simp add: inv_plus_ivl_def) |
185 by(auto simp add: filter_plus_ivl_def) |
186 (metis rep_minus_ivl add_diff_cancel add_commute)+ |
186 (metis rep_minus_ivl add_diff_cancel add_commute)+ |
187 next |
187 next |
188 case goal2 thus ?case |
188 case goal2 thus ?case |
189 by(cases a1, cases a2, |
189 by(cases a1, cases a2, |
190 auto simp: rep_ivl_def min_option_def max_option_def le_option_def split: if_splits option.splits) |
190 auto simp: rep_ivl_def min_option_def max_option_def le_option_def split: if_splits option.splits) |
191 qed |
191 qed |
192 |
192 |
193 interpretation |
193 interpretation |
194 Abs_Int1 rep_ivl num_ivl plus_ivl inv_plus_ivl inv_less_ivl "(iter' 3)" |
194 Abs_Int1 rep_ivl num_ivl plus_ivl filter_plus_ivl filter_less_ivl "(iter' 3)" |
195 defines afilter_ivl is afilter |
195 defines afilter_ivl is afilter |
196 and bfilter_ivl is bfilter |
196 and bfilter_ivl is bfilter |
197 and AI_ivl is AI |
197 and AI_ivl is AI |
198 and aval_ivl is aval' |
198 and aval_ivl is aval' |
199 proof qed (auto simp: iter'_pfp_above) |
199 proof qed (auto simp: iter'_pfp_above) |