Я изучаю естественные дедукции и практикую Coq.
Считаем формулу:
Inductive P :=
| ...
| And: P -> P -> P
| Imp: P -> P -> P. (* implication *)
Теперь я добавляю несколько правил вывода для доказуемости:
Inductive Deriv: P -> Prop :=
| ...
| intro_and: forall p q, Deriv p -> Deriv q -> Deriv (And p q)
| elim_and1: forall p q, Deriv (And p q) -> Deriv p
| elim_and2: forall p q, Deriv (And p q) -> Deriv q
| ...
Но я застрял с правилом введения для импликации. Я пробовал это:
| intro_imp: forall p q, (Deriv p -> Deriv q) -> Deriv (Imp p q)
, что явно не работает, потому что индуктивный случай появляется в отрицательном положении.
Правило введения для импликации:
[p]
.
.
q
-------
p ⊃ q
Как можно смоделировать правило введения импликации в Coq?