このように、我々はいくつかの(半)グループ論的性質を形式化しようとしていると仮定します。つまり、我々は上記の定義のいずれかの式を逆転場合なぜCoqはそれ自体で平等の対称性を理解できないのですか?
Section Group.
Variable A: Type.
Variable op: A -> A -> A.
Definition is_left_neutral (e: A) := forall x: A, (op e x) = x.
Definition is_right_neutral (e: A) := forall x: A, x = (op x e).
Lemma uniqueness_of_neutral:
forall a b: A, (is_left_neutral a) -> (is_right_neutral b) -> (a = b).
Proof.
intro; intro.
intros lna rnb.
elim lna with b; elim rnb with a.
reflexivity.
Qed.
End Group.
それは、うまく動作しますけどそれぞれ
Definition is_left_neutral (e: A) := forall x: A, x = (op e x).
と
Definition is_right_neutral (e: A) := forall x: A, (op x e) = x.
で定義を置き換える、証明はで失敗しますのアプリケーションのいずれかまたは両方が何もしないためです。 そこassert
に基づいて、それのための回避策は、ですが、それは...あまりにも多くの努力と単に迷惑なんだ...
等なぜ関与Coqの戦術(
elim
、case
、理由があることを確認し)注文に非常に敏感ですか?私は、それが顕著に戦術を遅らせるべきではないと思う(< < 2回)。私は毎回それを気にすることなく、必要に応じて
symmetry
を自動的に適用する方法はありますか?マニュアルにこの問題の言及が見つかりませんでした。
:いずれの場合では、あなたはそれが動作しない場合は、左から右、右から左への書き換えしようと
rewrite
の独自のバリアントを定義することができます?これは帰納的な考え方を推論するための素朴なツールです。それは裸の行動をしており、それは教訓的な目的のためにそのようにとどまることが望ましい。 – Yves