Propositional formulas and sequents


Require Export formulas.

Section Propositional_formulas.

  Variable V : Type.
  Variable L : modal_operators.

  Definition propositional(f : lambda_formula V L) : Prop :=
    rank_formula 1 f.

  Lemma propositional_lf_prop : (v : V),
    propositional (lf_prop v).

  Lemma propositional_neg : (f : lambda_formula V L),
    propositional (lf_neg f) → propositional f.

  Lemma propositional_neg_inv : (f : lambda_formula V L),
    propositional fpropositional (lf_neg f).

  Lemma propositional_lf_and : (f1 f2 : lambda_formula V L),
    propositional f1
    propositional f2
      propositional (lf_and f1 f2).

  Lemma propositional_and_left : (f1 f2 : lambda_formula V L),
    propositional (lf_and f1 f2) → propositional f1.

  Lemma propositional_and_right : (f1 f2 : lambda_formula V L),
    propositional (lf_and f1 f2) → propositional f2.

  Lemma propositional_tcc_modal :
    {X : Type}(op : operator L)
          (args : counted_list (lambda_formula V L) (arity L op)),
      propositional (lf_modal op args) → X.

  Lemma propositional_lambda_or :
    (f1 f2 : lambda_formula V L),
      propositional f1
      propositional f2
        propositional (lambda_or f1 f2).


  Definition propositional_sequent(s : sequent V L) : Prop :=
    rank_sequent 1 s.

  Lemma propositional_sequent_empty : propositional_sequent [].

  Lemma propositional_sequent_head :
    (s : sequent V L)(f : lambda_formula V L),
      propositional_sequent (f :: s) → propositional f.

  Lemma propositional_sequent_tail :
    (s : sequent V L)(f : lambda_formula V L),
      propositional_sequent (f :: s) → propositional_sequent s.

  Lemma propositional_or_formula :
    (nonempty_v : V)(s : sequent V L),
      propositional_sequent s
        propositional (or_formula_of_sequent s nonempty_v).

  Lemma propositional_sequent_cons :
    (s : sequent V L)(f : lambda_formula V L),
      propositional f
      propositional_sequent s
        propositional_sequent (f :: s).

  Lemma propositional_sequent_append :
    (sl sr : sequent V L),
      propositional_sequent sl
      propositional_sequent sr
        propositional_sequent (sl ++ sr).

  Lemma propositional_sequent_append_left :
    (sl sr : sequent V L),
      propositional_sequent (sl ++ sr) →
        propositional_sequent sl.

  Lemma propositional_sequent_append_right :
    (sl sr : sequent V L),
      propositional_sequent (sl ++ sr) →
        propositional_sequent sr.

  Lemma propositional_sequent_cons_append :
    (l1 l2 : sequent V L)(f1 f2 : lambda_formula V L),
      (propositional f1propositional f2) →
      propositional_sequent (l1 ++ f1 :: l2) →
        propositional_sequent (l1 ++ f2 :: l2).

  Lemma prop_form_is_propositional : (f : lambda_formula V L),
    prop_form fpropositional f.

  Lemma prop_sequent_is_propositional : (s : sequent V L),
    prop_sequent spropositional_sequent s.

End Propositional_formulas.

Implicit Arguments propositional [[V] [L]].
Implicit Arguments propositional_neg [V L].
Implicit Arguments propositional_and_left [V L].
Implicit Arguments propositional_and_right [V L].
Implicit Arguments propositional_tcc_modal [V L X].
Implicit Arguments propositional_sequent [[V] [L]].
Implicit Arguments propositional_sequent_tail [V L].
Implicit Arguments propositional_lambda_or [V L].
Implicit Arguments propositional_sequent_append_right [V L].
Implicit Arguments propositional_sequent_head [V L].
Implicit Arguments propositional_sequent_append [V L].
Implicit Arguments propositional_or_formula [V L].
Implicit Arguments prop_sequent_is_propositional [V L].