[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Parse Error



Was expecting "----MODULE (beginning of module)"
Encountered "<EOF>" al line 68, column 24 in module Euclid

Residual stack trace follows:
Begin module starting at line 68, column 24.
Module definition starting at line 68, column 24.

-----------This is My Code----------

EXTENDS Integers, TLAPS

p | q == \E d \in 1..q : q = p * d
Divisors(q) == {d \in 1..q : d | q}
Maximum(S) == CHOOSE x \in S : \A y \in S : x >= y
GCD(p,q) == Maximum(Divisors(p) \cap Divisors(q))
Number == Nat \ {0}

CONSTANTS M, N
VARIABLES x, y

Init == (x = M) /\ (y = N)

Next == \/ /\ x < y
           /\ y' = y - x
           /\ x' = x
        \/ /\ y < x
           /\ x' = x-y
           /\ y' = y

Spec == Init /\ [][Next]_<<x,y>>

ResultCorrect == (x = y) => x = GCD(M, N)

InductiveInvariant == /\ x \in Number
                      /\ y \in Number
                      /\ GCD(x, y) = GCD(M, N)

ASSUME NumberAssumption == M \in Number /\ N \in Number

THEOREM InitProperty == Init => InductiveInvariant
  BY NumberAssumption DEF Init, InductiveInvariant

AXIOM GCDProperty1 == \A p \in Number : GCD(p, p) = p
AXIOM GCDProperty2 == \A p, q \in Number : GCD(p, q) = GCD(q, p)
AXIOM GCDProperty3 == \A p, q \in Number : (p < q) => GCD(p, q) = GCD(p, q-p)

THEOREM NextProperty == InductiveInvariant /\ Next => InductiveInvariant'
<1> SUFFICES ASSUME InductiveInvariant, Next
             PROVE  InductiveInvariant'
  OBVIOUS
<1> USE DEF InductiveInvariant, Next
<1>1 (x < y) \/ (y < x)
  OBVIOUS
<1>a CASE x < y
  <2>1 (y - x \in Number) /\ ~(y < x)
    BY <1>a DEF Number
  <2> QED
    BY <1>a, <2>1, GCDProperty3
<1>b CASE y < x
  <2>1 (x - y \in Number) /\ ~(x < y)
    BY <1>b DEF Number
  <2>2 GCD(y', x') = GCD(y, x)
    BY <1>b, <2>1, GCDProperty3
  <2> QED
    BY <1>b, <2>1, <2>2, GCDProperty2
<1>2 QED
  BY <1>1, <1>a, <1>b

THEOREM Correctness == Spec => []ResultCorrect
  <1>1 InductiveInvariant /\ UNCHANGED <<x,y>> => InductiveInvariant'
    BY DEF InductiveInvariant
  <1>2 Spec => []InductiveInvariant
    BY PTL, InitProperty, NextProperty, <1>1 DEF Spec
  <1>3 InductiveInvariant => ResultCorrect
    BY GCDProperty1 DEF InductiveInvariant, ResultCorrect