(load-file "elm-lemmas.ath")

(define lemma1 "ALL n x | [n x] in data ==> [x] in elms(n)")

(!pf lemma1 [scalar-lemma elms-semantics union-axiom])
               
(define ind-lemma "ALL k m n x | [n m] in next^k & [m x] in data ==> [x] in elms(n)")

(define (goal k)
  (forall ?m ?n ?x "[n m] in next^k & [m x] in data ==> [x] in elms(n)"))

(by-induction-on ?k (goal ?k)
  (zero (!pf (goal zero) [lemma1 elms-semantics pow-axiom-1 id-axiom]))
  ((succ k) (pick-any m n x 
	      (assume-let ((hyp "[n m] in next^k+1 & [m x] in data"))
 	      (!pf "[x] in elms(n)" [hyp (goal k) pow-axiom-2 elms-semantics union-lemma-1 union-axiom])))))

;; Final inclusion theorem: ALL n | ({[n]}.next*).data  subset elms(n)
      
(pick-any n
  (!prove-subsets "({[n]}.next*).data"  "elms(n)"  [elms-semantics star-pow-lemma sbdot-axiom scalar-lemma ind-lemma]))

