From c01f82aeb71fba114e946684cefd94ff21112a33 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Wed, 5 Feb 2014 23:04:44 -0800 Subject: [PATCH] feat(builtin): add sum types Signed-off-by: Leonardo de Moura --- src/builtin/CMakeLists.txt | 1 + src/builtin/obj/kernel.olean | Bin 49327 -> 49224 bytes src/builtin/obj/optional.olean | Bin 6810 -> 6683 bytes src/builtin/obj/subtype.olean | Bin 3049 -> 3026 bytes src/builtin/obj/sum.olean | Bin 0 -> 10414 bytes src/builtin/optional.lean | 16 ++-- src/builtin/sum.lean | 122 ++++++++++++++++++++++++++ src/library/elaborator/elaborator.cpp | 4 +- 8 files changed, 133 insertions(+), 10 deletions(-) create mode 100644 src/builtin/obj/sum.olean create mode 100644 src/builtin/sum.lean diff --git a/src/builtin/CMakeLists.txt b/src/builtin/CMakeLists.txt index 36ff51bfb..17822f71b 100644 --- a/src/builtin/CMakeLists.txt +++ b/src/builtin/CMakeLists.txt @@ -95,6 +95,7 @@ add_theory("Real.lean" "${CMAKE_CURRENT_BINARY_DIR}/Int.olean") add_theory("specialfn.lean" "${CMAKE_CURRENT_BINARY_DIR}/Real.olean") add_theory("subtype.lean" "${CMAKE_CURRENT_BINARY_DIR}/kernel.olean") add_theory("optional.lean" "${CMAKE_CURRENT_BINARY_DIR}/subtype.olean") +add_theory("sum.lean" "${CMAKE_CURRENT_BINARY_DIR}/optional.olean") update_interface("kernel.olean" "kernel" "-n") update_interface("Nat.olean" "library/arith" "-n") diff --git a/src/builtin/obj/kernel.olean b/src/builtin/obj/kernel.olean index 6c1b816f472ab11adfac0a85f132c3a9d4489623..9b1671905ddac4f63553e336b3ee7b91423ee4e0 100644 GIT binary patch delta 2180 zcmZuyZA_b06n<|h6#Bja8lhUyQlP8|BW$`XDiN|_9Qdc%AaTmvI%Y6RoF+4oNHAOC z4_y{BJsLA2f-=6w7|=342P`orV{FmD5~dLy{t_`J{%~jp;(5+nO4mrzC+9xrx#ymb zdtdrb#a%lYH_-ECyryY(qV%u+RJ~+tKf&18{;2vQ)X{EJ2~+S+Q}BFK<_w$G7Ob!5 zGg`74v?Z)(=(&zoC;aiNaA|h{8~n51pp6c{x=H>{uewfeb-vHI-kGIl=#egW;cRRm z?0X&imSa6s*HxN157#X~Fy@@!Xu8XtR2M2QzaezMeNse@K8lYJ$5alEje7OE6HK(m|lM^QA*U;IE-(o219 zu9`&4Uh%MTRLg^z&Og0|oR=PdAlh3YvO}RmmwZYcr}z5nR0FN_f9+<`9-lZP@&=A- zQVn!tAY0YY9|NzdMmjj?)1%~cdN7B5eS=L#jg2E%e=v{U9rWZi3-J?()@_UyG*WM4 zumx=vGnqDO3}!k5%*o_bIfUvp2F~9TddOInf>J^B(09R1M>m_AJr{^(F}oJbRRI@D)sx&0cRWZI8lp}3Vvmav)MD0 z&h2`BC`)}qZx8L@s=J5wC7gltUHWS%E1?PI8Opdkm&&m#?ik=+|{^SjR&EtU(Qq{gLuR>>>pma8!r+0P|A^j;>z zezpu7eKzWe+JrQ;g>Z>CM_uBIe-Z3PbiB3E+}hj1GKBqX83s7yXCxOe>Jg2cDMHa0 z`lc}4bRX11Ad!M8Or}#~8Cw~I(+(#$IA$hie~R_0JUY2MW0m; z#~Qh`KJIzUD?~DgJl%3)r>3w`Ln6uvz=y{GXKmTesLzvs!nG^F=Kr26S3vHYnE}Qc z7SiVv#f6JzUWl~Fpq^lmw5_vjSZBqJP5L6;oybZFBw89Ek;dz{$a^KHDggJ74C)yM znUi%cGF2hB+y=&AontUcppJ_SbW3QI(77w0s#mCZ^68xcsLV3(#kOFnH%G>(S!Er0 zcYKFiCSA|Ui?YfmJ{P$cSF{UjG~Vum-iD~GpPJgeU2d;b6n;SL3O`s#Ezw^a@=Uv4c$rzl4^;tD zPWqO?tSGiZBxvksFgq4q7CZ;wks=VssG>JIT+}=5sFo7s0~K4sf~0gWvJoX22LVUG W#ayke?~ZYtQm-CSx9QERW&Z)&nR?X# delta 2346 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 ZvFkZ}9lH91&vn+L$K+DcKY{-c`aeHGeH;J) literal 6810 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 N6LqERUdI1N{U2F{ifsS@ diff --git a/src/builtin/obj/subtype.olean b/src/builtin/obj/subtype.olean index c4ee00afdfb7cd8801512ebe998f6f5c2339533a..a408f48c2c8befe949c5a735bd44ffe191870ee9 100644 GIT binary patch delta 370 zcmaDUeo1@-Hw&ZnW*(OFjEqv7@38hV38*jt0S^<9U<0wHO|IvdZ?Ig0nW>~GF|QaT z#K5ouL@26)NF@*f<}X$QG0VaH$$p%Y@teR*5P?rANPaO`5r~)uBDSb8GZk0n=7QKz z!?%H0it5ZD$__*@teAX^Q?4H3S}-3(fDPITVr^z;ssPapd%(_A0C|W5;o`j@sTBwp zL--&;unQKWs|3j~f-TDjF~J@Nx`_`cstyv^0T!Ly#1+XXKKTxp8oM>b?8yfiMJCH~ MJ2PIHoXFh)0Mq6*wEzGB delta 387 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 cek0n_lx-AL{47p?