Skip to content
Documentation out of dateLearn more

ConstructiveSemantics

A little proof of cut eliminiation for the logic FF in an unpublished paper by Reed and Pfenning.

(options removed from twelftag: check=“true”)

% Termination metric
%sort lo %.
%sort hi %.
%term * lo %.
%term s %pi lo %-> hi %.
% Syntax
%sort t+ %.
% "terms" that go in positive atoms
%sort t- %.
%name t- %.
% "terms" that go in negative atoms
%sort p %.
% positive props
%sort o %.
% negative props
%sort i %.
% worlds, frames
% Propositions
%term imp %pi p %-> o %-> o %.
%term top o %.
%term s- %pi t- %-> o %.
%term s+ %pi t+ %-> p %.
%term v %pi o %-> p %.
% Stub terms to make coverage nontrivial
%term t+/ t+ %.
%term t-/ t- %.
% Judgments
%sort j %.
%name j %.
%term /lfoc %pi o %-> t- %-> j %.
%term /rinv %pi o %-> j %.
%term /rfoc %pi p %-> j %.
%sort pf {_ j} %.
%inline lfoc [A] [T] pf (/lfoc A T) %.
%inline rinv [A] pf (/rinv A) %.
%inline rfoc [B] pf (/rfoc B) %.
%sort <= {_ t-} {_ t-} %.
%sort hyp {_ p} %.
% Stub judgment to make coverage nontrivial
%term refl <= T T %.
% Inference Rules
%term s+R %pi (hyp (s+ T)) %-> (rfoc (s+ T)) %.
%term s-L %pi (<= T T0) %-> (lfoc (s- T) T0) %.
%term vR %pi (rinv A) %-> (rfoc (v A)) %.
%term vL %pi (lfoc A T) %-> (hyp (v A)) %-> (rinv (s- T)) %.
%term topR rinv top %.
%term impR %pi (rinv (imp B A)) %<- (%pi (hyp B) %-> (rinv A)) %.
%term impL %pi (lfoc (imp B A) T) %<- (rfoc B) %<- (lfoc A T) %.
% Theorems
%sort trans {_ <= T1 T2} {_ <= T2 T3} {_ <= T1 T3} %.
%sort mono/rinv {_ <= T1 T2} {_ rinv (s- T1)} {_ rinv (s- T2)} %.
%sort mono/lfoc {_ <= T1 T2} {_ lfoc A T1} {_ lfoc A T2} %.
%sort cut/rfoc {B} {_ hi} {_ rfoc B} {_ %pi (hyp B) %-> (pf J)} {_ pf J} %.
%sort cut/rinv {A} {_ hi} {_ rinv A} {_ %pi (hyp (v A)) %-> (pf J)} {_ pf J} %.
%sort cut/pc {A} {_ lo} {_ rinv A} {_ lfoc A T} {_ rinv (s- T)} %.
% mono/rinv proof
%term mono/rinv/ %pi (mono/rinv LE (vL LF H) (vL LF' H)) %<- (mono/lfoc LE LF LF') %.
% mono/lfoc proof
%term mono/lfoc/impL %pi (mono/lfoc LE (impL LF RF) (impL LF' RF)) %<- (mono/lfoc LE LF LF') %.
%term mono/lfoc/s- %pi (mono/lfoc LE (s-L LE') (s-L LE'')) %<- (trans LE' LE LE'') %.
% cut/rfoc proof
%term cut/rfoc/v %pi (cut/rfoc (v A) TM (vR RI) PF1 PF2) %<- (cut/rinv A TM RI PF1 PF2) %.
%term cut/rfoc/s+ cut/rfoc (s+ T) TM (s+R H) PF (PF H) %.
% cut/pc proof
%term cut/pc/imp
%pi (cut/pc (imp B A) TM (impR RI) (impL LF RF) RI'')
%<- (cut/rfoc B (s TM) RF RI RI')
%<- (cut/pc A TM RI' LF RI'') %.
%term cut/pc/s- %pi (cut/pc (s- T) TM IN (s-L LE) OUT) %<- (mono/rinv LE IN OUT) %.
% cut/rinv proof
%term cut/rinv/impL
%pi (cut/rinv A TM RI ([x] impL (LF x) (RF x)) (impL LF' RF'))
%<- (cut/rinv A TM RI LF LF')
%<- (cut/rinv A TM RI RF RF') %.
%term cut/rinv/impR
%pi (cut/rinv A TM RI ([x] impR ([y] D x y)) (impR Y))
%<- ({y} cut/rinv A TM RI ([x] D x y) (Y y)) %.
%term cut/rinv/s-L cut/rinv A TM RI ([x] s-L D) (s-L D) %.
%term cut/rinv/vL/hit
%pi (cut/rinv A (s TM) RI ([x] vL (LF x) x) Y)
%<- (cut/rinv A (s TM) RI LF Z)
%<- (cut/pc A TM RI Z Y) %.
%term cut/rinv/vL/miss %pi (cut/rinv A TM RI ([x] vL (LF x) H) (vL LF' H)) %<- (cut/rinv A TM RI LF LF') %.
%term cut/rinv/vR %pi (cut/rinv A TM RI ([x] vR (RI0 x)) (vR RI0')) %<- (cut/rinv A TM RI RI0 RI0') %.
%term cut/rinv/s+R cut/rinv A TM RI ([x] s+R H) (s+R H) %.
%term cut/rinv/topR cut/rinv A TM RI ([x] topR) topR %.
% Checks
%block b [P p] {x hyp P}%.
%mode trans %in %in %out %.
%mode mono/rinv %in %in %out %.
%mode mono/lfoc %in %in %out %.
%mode cut/rfoc %in %in %in %in %out %.
%mode cut/rinv %in %in %in %in %out %.
%mode cut/pc %in %in %in %in %out %.
%worlds (b) (trans _ _ _) (mono/rinv _ _ _) (mono/lfoc _ _ _) %.
%worlds (b) (cut/rfoc _ _ _ _ _) (cut/rinv _ _ _ _ _) (cut/pc _ _ _ _ _) %.
% Assume structure relation is transitive
%total LE1 (trans LE1 LE2 LE3) %.
%total (RI1 LF1) (mono/rinv LE RI1 RI2) (mono/lfoc LE' LF1 LF2) %.
%total {(B A A') (N1 N2 N3) [(RF RI RI') (PFRF1 PFRI1 LF)]} (cut/rfoc B N1 RF PFRF1 PFRF2) (cut/rinv A N2 RI PFRI1 PFRI2) (cut/pc A' N3 RI' LF RI'') %.