... ... ? induction inversion, , .
, , :
Coq
. :
Coq , . , destruct (, even 3: !) ( forall n, even (2*n+1) -> False ( nat) - !). Coq . , . destruct - : - . ( inversion ). . , . .
, destruct H. :
Lemma bar_refl : forall n n' m m',
bar (n, m) (n', m') -> n = n'.
Proof.
intros n n' m m' H.
refine (match H with
| Bar a b => _
end).
:
n, n', m, m' : nat
H : bar (n, m) (n', m')
a, b : nat
============================
n = n'
, H , clear H.: refine (...); clear H.. .
Coq (n, m) (n',m'), p p', , p = (a, b) p' = (a, b). , n = n', (n,m), (n',m') - Coq a = a.
Coq . , , , . @Vinz, , :
Undo. (* to undo the previous pattern-matching *)
refine (match H in (bar p p') return fst p = fst p' with
| Bar a b => _
end).
Coq, H - p p' , Coq fst p = fst p' p p' (a,b). :
n, n', m, m' : nat
H : bar (n, m) (n', m')
a, b : nat
============================
fst (a, b) = fst (a, b)
reflexivity .
, , destruct ( , ):
Lemma bar_refl_all : forall n n' m m',
bar (n, m) (n', m') -> (n, m) = (n', m').
Proof.
intros. destruct H. reflexivity.
Qed.
: , , Coq .