(load "~/git/minlog/init.scm")

(add-var-name "x" "y" "z" (py "alpha"))

;; Adding constants
(add-program-constant "Suc" (py "alpha=>alpha") t-deg-one 'const 1)
(add-prefix-display-string "Suc" "S")

(add-program-constant "Plus" (py "alpha=>alpha=>alpha") t-deg-one 'add-op 1)
(add-infix-display-string "Plus" "+" 'add-op)

(add-program-constant "Z" (py "alpha") t-deg-one 'const)
;; is written as '(null alpha)' for reasons
(pp (pt "(Z alpha)"))

(add-ids (list (list "Eq" (make-arity (py "alpha") (py "alpha"))))
	 '("all x Eq x x" "Refl")
	 '("all x,y(Eq x y -> Eq y x)" "Sym")
	 '("all x,y,z(Eq x y -> Eq y z -> Eq x z)" "Trans")
	 '("all x,y(Eq x y -> Eq (S x)(S y))" "Suc")
	 '("all x(Eq (x+(Z alpha)) x)" "PlusZero")
	 '("all x,y(Eq (x + S y) (S(x+y)))" "PlusSuc"))

;; (display-idpc "Eq")

;; We add the ind-rule as global assumption
(add-pvar-name "P" (make-arity (py "alpha")))
(add-global-assumption "Induction" (pf "P (Z alpha) -> all x(P x -> P(S x)) -> all x P x"))

(set-goal "all x Eq ((Z alpha)+x) x")
;; ...
(save "ZeroPlus")

(set-goal "all y,x(Eq (S x+ y) (S(x+y)))")
;; ...
(save "SucPlus")

(set-goal "all x,y(Eq (x+y) (y+x))")

