Учитывая, что доказательства в coq - это просто очень сложные функции, которые могут быть построены любым из множества способов, кажется, имеет смысл, что будет существовать доказательство coq каждой теоремы, которая не включает в себя ни ранее доказанные теоремы, ни заявления assert
.Можно ли доказать теоремы в coq (или вообще) без использования ранее доказанных лемм?
Например, доказательство коммутативности натуральных тот просто, без чешуй, несмотря на то, что можно было бы сделать проще с чешуями:
Theorem plus_comm' :
forall n m : nat, n + m = m + n.
Proof.
induction n.
intro m. simpl. induction m.
reflexivity.
simpl. rewrite <- IHm. reflexivity.
intro m. simpl. rewrite -> IHn. induction m.
reflexivity.
simpl. rewrite <- IHm. reflexivity.
Qed.
Но когда я пытаюсь сделать то же самое для коммутативности умножение, я неизбежно сталкиваюсь с ситуацией, когда мне требуется факт о добавлении.
Theorem mult_comm' :
forall n m : nat, n * m = m * n.
Proof.
induction n.
intro m. simpl. induction m.
reflexivity.
simpl. apply IHm.
intro m. simpl. rewrite -> IHn. induction m.
reflexivity.
simpl. rewrite <- IHm. f_equal.
(* left with goal:
m + (n + m * n) = n + (m + m * n)
*)
Abort.
Почему?
Спасибо, что предоставили доказательство этому примеру, и я не смог это сделать. Причина, по которой я задал этот вопрос, заключается в том, что я изучаю автоматическую теоретическую доказательство и пытаюсь написать тактику для автоматизации индуктивных доказательств без использования лемм, поэтому осознание того, что я просто недостаточно творчески, мне очень полезно. Еще раз спасибо. – 7132208