-\graph Z3
+\require preamble
-\sorts Prop, Set, Term
+\* Intuitionistic Predicate Logic with Equality *\
-\open syntax \* [1] 2.1. *\
+\open elements \* [1] 2.1. 2.2. 3.1 *\
\decl "logical false" False: *Prop
\decl "logical disjunction" Or: *Prop => *Prop -> *Prop
- \decl "logical implication" Imp: *Prop => *Prop -> *Prop
+\* implication and non-dependent abstraction are isomorphic *\
+ \def "logical implication"
+ Imp = [p:*Prop, q:*Prop] p -> q : *Prop => *Prop -> *Prop
- \decl "logical comprehension" All: [~:*Set->*Prop] *Prop
+\* comprehension and dependent abstraction are isomorphic *\
+ \def "unrestricted logical comprehension"
+ All = [q:*Obj->*Prop] [x:*Obj] q(x) : (*Obj -> *Prop) -> *Prop
- \decl "logical existence" Ex: [~:*Set->*Prop] *Prop
+ \decl "unrestricted logical existence" Ex: (*Obj -> *Prop) -> *Prop
- \decl "syntactical identity" Id: *Set => *Set -> *Prop
-
- \decl "rule application" App: *Set => *Set => *Set -> *Prop
-
- \decl "classification predicate" Cl: *Set -> *Prop
-
- \decl "classification membership" Eta: *Set => *Set -> *Prop
-
- \decl "object-to-term-coercion" T: *Set -> *Term
-
- \decl "term application" At: *Term => *Term -> *Term
-
- \decl "term-object equivalence" E: *Term => *Set -> *Prop
+ \decl "syntactical identity" Id: *Obj => *Obj -> *Prop
\close
-\open non_logical_axioms
+\open abbreviations \* [1] 2.3. *\
+
+ \def "logical negation"
+ Not = [p:*Prop] p -> False : *Prop -> *Prop
- \ax e_refl: [x:*Set] E(T(x), x)
+ \def "logical equivalence"
+ Iff = [p:*Prop, q:*Prop] And(p -> q, q -> p) : *Prop => *Prop -> *Prop
- \ax e_at_in: [f:*Set][x:*Set][y:*Set] App(f,x,y) -> E(At(T(f), T(x)), y)
+ \def "unrestricted strict logical existence"
+ EX = [p:*Obj->*Prop] Ex([x:*Obj] And(p(x), [y:*Obj] p(y) -> Id(x, y)))
+ : (*Obj -> *Prop) -> *Prop
- \ax e_at_out: [f:*Set][x:*Set][y:*Set] E(At(T(f), T(x)), y) -> App(f,x,y)
+ \def "negated syntactical identity"
+ NId = [x:*Obj, y:*Obj] Not(Id(x, y)) : *Obj => *Obj -> *Prop
\close