Newer
Older
Require Import GQM.Base.
Require Import GQM.GQM.
Inductive GQMded: context -> form -> Prop :=
| gqm_in G f: In f G -> GQMded G f
| gqm_andE1 G f1 f2: GQMded G (f1 & f2) -> GQMded G f1
| gqm_andE2 G f1 f2: GQMded G (f1 & f2) -> GQMded G f2
| gqm_andI G f1 f2: GQMded G f1 -> GQMded G f2 -> GQMded G (f1 & f2)
| gqm_negI G f g: GQMded G (f ->> g) -> GQMded G (f ->> -! g) -> GQMded G (-! f) (* TODO neg intro*)
| gqm_negE G f: GQMded G (Neg (Neg f)) -> GQMded G f. (* TODO neg intro*)
Hint Constructors GQMded : GQMDB.
Lemma gqm_orE1 : forall G f1 f2, GQMded G f1 -> GQMded G (f1 ||| f2).
Proof.
move => G f1 f2 Hf1.
unfold Or.
apply: (gqm_negI _ _ f1).
- unfold Imp.
unfold Or.
Lemma gqm_impE : forall G f1 f2, GQMded G f1 -> GQMded G (f1 ->> f2) -> GQMded G f2.
Proof.
move => G f1.
elim: f1 G.
- move => x G f2 Hvar Himp.
inversion Himp; subst.
elim: Himp.
Lemma gqm_impI : forall G f1 f2, GQMded (f1 :: G) f2 -> GQMded G (f1 ->> f2).
Proof.
move => G f1 f2.
elim.