reserve a,b,c for boolean object;
reserve p,q,r,s,A,B,C for Element of LTLB_WFF,
        F,G,X,Y for Subset of LTLB_WFF,
        i,j,k,n for Element of NAT,
        f,f1,f2,g for FinSequence of LTLB_WFF;
reserve M for LTLModel;

theorem Th27:
  F|=A=>B & F|=A=>('X' A) implies F|=A=>('G' B)
 proof
  assume that
   A1: F|=A=>B and
   A2: F|=A=>('X' A);
  let M;
  assume A3: M|=F;
  let n be Element of NAT;
  defpred P1[Nat] means
   (SAT M).[n+$1,A]=1;
  per cases by XBOOLEAN:def 3;
  suppose A4: (SAT M).[n,A]=1;
   A5: for k being Nat st P1[k] holds P1[k+1]
   proof
    let k be Nat such that
     A6: P1[k];
     reconsider kk=k as Element of NAT by ORDINAL1:def 12;
    (SAT M).[n+kk,A=>('X' A)]=1 by A2,A3,Def12;
    then (SAT M).[n+kk,A]=>(SAT M).[n+kk,'X' A]=1 by Def11;
    then (SAT M).[n+kk+1,A]=1 by A6,Th9;
    hence P1[k+1];
   end;
   A7: P1[0] by A4;
   A8: for i be Nat holds P1[i] from NAT_1:sch 2(A7,A5);
   now let i be Element of NAT;
    (SAT M).[n+i,A=>B]=1 by A3,A1,Def12;
    then A9: (SAT M).[n+i,A]=>(SAT M).[n+i,B]=1 by Def11;
    (SAT M).[n+i,A]=1 by A8;
    hence (SAT M).[n+i,B]=1 by A9;
   end;
   then (SAT M).[n,'G' B]=1 by Th10;
   then (SAT M).[n,A]=>(SAT M).[n,'G' B]=1;
   hence (SAT M).[n,A=>('G' B)]=1 by Def11;
  end;
  suppose(SAT M).[n,A]=0;
   then (SAT M).[n,A]=>(SAT M).[n,'G' B]=1;
   hence (SAT M).[n,A=>('G' B)]=1 by Def11;
  end;
 end;
