namespace latin:/

import proving scala://latin2/proving

theory PropositionsITP =
  proof # block proof 1;
  rule proving?CheckProof

  hence  # %n L1T by 2
  suffices # %n 1 
  use # use 1
  rule proving?UseStep


theory PLITP =
  include ?PropositionsITP

  assume # %n L1T
  rule proving?AssumeStep
  cases # %n 1,


theory SFOLITP =
  include ?PLITP
  fix    # %n L1T
  rule proving?FixStep


theory Test : ?SFOLITP =
  include ?SFOLEQND

  test : {T,A: tm T⟶ prop} ⊦ ∀ [x] A x ⇒ A x
       = [T,A] proof fix x; assume a; use a
  
  // the above is equivalent to the following in standard natural deduction❙
  test2 : {T,A: tm T⟶ prop} ⊦ ∀ [x] A x ⇒ A x
       = [T,A] forallI [x] impI [a] a