theory Base imports Spartan.Equivalence begin section \Notation\ syntax "_dollar" :: \logic \ logic \ logic\ (infixr "$" 3) translations "a $ b" \ "a (b)" abbreviation (input) K where "K x \ \_. x" section \Sum type\ axiomatization Sum :: \o \ o \ o\ and inl :: \o \ o \ o \ o\ and inr :: \o \ o \ o \ o\ and SumInd :: \o \ o \ (o \ o) \ (o \ o) \ (o \ o) \ o \ o\ notation Sum (infixl "\" 50) axiomatization where SumF: "\A: U i; B: U i\ \ A \ B: U i" and Sum_inl: "\a: A; B: U i\ \ inl A B a: A \ B" and Sum_inr: "\b: B; A: U i\ \ inr A B b: A \ B" and SumE: "\ s: A \ B; \s. s: A \ B \ C s: U i; \a. a: A \ c a: C (inl A B a); \b. b: B \ d b: C (inr A B b) \ \ SumInd A B (\s. C s) (\a. c a) (\b. d b) s: C s" and Sum_comp_inl: "\ a: A; \s. s: A \ B \ C s: U i; \a. a: A \ c a: C (inl A B a); \b. b: B \ d b: C (inr A B b) \ \ SumInd A B (\s. C s) (\a. c a) (\b. d b) (inl A B a) \ c a" and Sum_comp_inr: "\ b: B; \s. s: A \ B \ C s: U i; \a. a: A \ c a: C (inl A B a); \b. b: B \ d b: C (inr A B b) \ \ SumInd A B (\s. C s) (\a. c a) (\b. d b) (inr A B b) \ d b" lemmas [intros] = SumF Sum_inl Sum_inr and [elims] = SumE and [comps] = Sum_comp_inl Sum_comp_inr section \Empty and unit types\ axiomatization Top :: \o\ and tt :: \o\ and TopInd :: \(o \ o) \ o \ o \ o\ and Bot :: \o\ and BotInd :: \(o \ o) \ o \ o\ notation Top ("\") and Bot ("\") axiomatization where TopF: "\: U i" and TopI: "tt: \" and TopE: "\a: \; \x. x: \ \ C x: U i; c: C tt\ \ TopInd (\x. C x) c a: C a" and Top_comp: "\\x. x: \ \ C x: U i; c: C tt\ \ TopInd (\x. C x) c tt \ c" and BotF: "\: U i" and BotE: "\x: \; \x. x: \ \ C x: U i\ \ BotInd (\x. C x) x: C x" lemmas [intros] = TopF TopI BotF and [elims] = TopE BotE and [comps] = Top_comp section \Booleans\ definition "Bool \ \ \ \" definition "true \ inl \ \ tt" definition "false \ inr \ \ tt" \ \Can define if-then-else etc.\ end