Isabelle/Isar(その22)
では,次の例として
lemma fixes a b c d :: "real" shows "(ALL x. abs (x - c) + abs (x - d) <= abs (x - a) + abs(x - b)) <-> (a + b = c + d & abs (c - d) <= abs (a - b))"
を取り上げます.
普通の証明は,2つの含意に分けて,xとしてmax{a,b,c,d}を用いて-c-d≦-a-bつまりa+b≦c+d,xとしてmin{a,b,c,d}を用いてc+d≦a+b,従って,a+b=c+d.このとき(c+d)/2=(a+b)/2なので,それぞれを左辺,右辺のxとして用いて|c-d|≦|a-b|.逆はa+b=c+dならばmin{c,d},max{c,d},はmin{a,b},max{a,b}に挟まれるので,それらを境界として実数全体の集合を5つに分け,xが何れに属すかに応じて絶対値記号を外す.といったものでしょう.
Isarで,この通りに書いてみます.
lemma fixes a b c d :: "real" shows "(ALL x. abs (x - c) + abs (x - d) <= abs (x - a) + abs(x - b)) <-> (a + b = c + d & abs (c - d) <= abs (a - b))" (is "?P <-> ?Q" is "(ALL x. ?LR x) <-> ?Q" is "(ALL x. ?L x <= ?R x) <-> ?Q1 & ?Q2") proof assume 0: "?P" hence "?LR (max a (max b (max c d)))" by metis hence "a + b <= c + d" by simp moreover from 0 have "?LR (min a (min b (min c d)))" by metis hence "c + d <= a + b" by simp ultimately have "?Q1" by simp moreover with 0 have "?L ((c + d) / 2) <= ?R ((a + b) / 2)" by metis with lem_abs have "?Q2" by simp ultimately show "?Q" by simp next assume 0: "?Q" let ?A = "min a b" and ?C = "min c d" and ?D = "max c d" and ?B = "max a b" show "?P" proof fix x have "x <= ?A | ?A < x & x <= ?C | ?C < x & x <= ?D | ?D < x & x <= ?B | ?B < x" by auto moreover from 0 have "x <= ?A --> ?LR x" and "?A < x & x <= ?C --> ?LR x" and "?C < x & x <= ?D --> ?LR x" and "?D < x & x <= ?B --> ?LR x" and "?B < x --> ?LR x" by auto ultimately show "?LR x" by metis qed qed
ご覧通りですが,かなり新しい項目がありますので,説明していきましょう.