私は、ASCII文字が空白であるかどうかの決定手順を自動化しようとしています。ここに私が現在持っているものがあります。タクティックオートメーション:簡単な決定手順
Require Import Ascii String.
Scheme Equality for ascii.
Definition IsWhitespace (c : ascii) := (c = "009"%char) \/ (c = "032"%char).
Definition isWhitespace (c : ascii) : {IsWhitespace c} + {not (IsWhitespace c)}.
Proof.
unfold IsWhitespace.
pose proof (ascii_eq_dec c "009"%char) as [H1|H1];
pose proof (ascii_eq_dec c "032"%char) as [H2|H2];
auto.
right. intros [H3|H3]; auto.
Admitted.
証明をより簡潔にするには、どのような方法が適していますか?
これは面白いです!あなたは '引数'の側面を説明してもらえますか?なぜ 'Definition'ではなく' Notation'を使うのですか? –
...このアプローチは、標準ライブラリの 'Coq.Structures.Equalities'部分とよく似ていますが、使用しない特別な理由はありますか? –
'Arguments'ビットを使うと、' 'dec(x = y)'と書くことができます。 "typeclassの解像度で' x = y'の判定可能性のインスタンスを見つけて、ここで使用します。それがなければ、 'dec(x = y)'は型エラーです。なぜなら、 'dec'は"命題の決定可能性の最初のインスタンスを型定義の解像度で見つけ出し、ここで使用する "という意味です。 –