次の 3 つの引数を持つ and の否定の定義が与えられれば、さまざまなケースを簡単に証明できますが、この証明を 1 つの forall ステートメントで何とか Coq を使用して書きたいと思います。Forall b1 b2 b3 : bool そのうちの 1 つが false の場合は true が返され、3 つすべてが true の場合は false が返されます。この前提を Coq でどのように記述すれば、split などの戦術を使用して接続詞を分割することができますか?
Definition negb (b:bool) : bool :=
match b with
| true => false
| false => true
end.
Definition andb3 (b1:bool) (b2:bool) (b3:bool) : bool :=
match b1 with
| true =>
match b2 with
| true => b3
| false => false
end
| false => false
end.
Definition nandb3 (b1:bool)(b2:bool)(b3:bool):bool :=
negb (andb3 b1 b2 b3).
Example nandb1: (nandb3 true false true) = true.
Proof. reflexivity. Qed.
Example nandb2: (nandb3 false true true) = true.
Proof. reflexivity. Qed.