これがdiffbを定義する私の試みです。diffb xy は、x <> y の場合は true を返し、それ以外の場合は false を返します。
Definition diffb (b c : bool) : bool :=
match b, c with
| true, false => true
| false, true => true
| false, false => false
| true, true => false
end.
上記でdiffbを定義しようとしましたが、それが正しいかどうかはわかりません:(、またdiffbを証明する必要があります:
Theorem diffb_correct : forall a b : bool,
a <> b <-> diffb a b = true.
サブゴール全体に diffb が表示された場合、どうすればよいかわかりません。
ありがとう
ルシオ
編集。解決しました:)
ここにあります
Definition diffb (b c : bool) : bool :=
match b, c with
| true, false => true
| false, true => true
| false, false => false
| true, true => false
end.
(* 関数が仕様を満たしていることを証明します。*)
Theorem diffb_correct : forall a b : bool,
a <> b <-> diffb a b = true.
intro a.
destruct a.
intro b.
destruct b.
split.
intro c.
destruct c.
reflexivity.
intro d.
discriminate.
split.
intro e.
reflexivity.
intro f.
discriminate.
intro g.
destruct g.
split.
intro h.
reflexivity.
discriminate.
split.
intro i.
destruct i.
reflexivity.
discriminate.
Qed.