mcard-js 2.1.12 → 2.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/hash/HashValidator.d.ts +14 -0
- package/dist/hash/HashValidator.d.ts.map +1 -0
- package/dist/hash/HashValidator.js +57 -0
- package/dist/hash/HashValidator.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/model/CardCollection.d.ts +92 -0
- package/dist/model/CardCollection.d.ts.map +1 -0
- package/dist/model/CardCollection.js +217 -0
- package/dist/model/CardCollection.js.map +1 -0
- package/dist/model/ContentTypeInterpreter.d.ts +23 -0
- package/dist/model/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/ContentTypeInterpreter.js +140 -0
- package/dist/model/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/EventProducer.d.ts +10 -0
- package/dist/model/EventProducer.d.ts.map +1 -0
- package/dist/model/EventProducer.js +46 -0
- package/dist/model/EventProducer.js.map +1 -0
- package/dist/model/GTime.d.ts +44 -0
- package/dist/model/GTime.d.ts.map +1 -0
- package/dist/model/GTime.js +91 -0
- package/dist/model/GTime.js.map +1 -0
- package/dist/model/Handle.d.ts +37 -0
- package/dist/model/Handle.d.ts.map +1 -0
- package/dist/model/Handle.js +90 -0
- package/dist/model/Handle.js.map +1 -0
- package/dist/model/MCard.d.ts +43 -0
- package/dist/model/MCard.d.ts.map +1 -0
- package/dist/model/MCard.js +76 -0
- package/dist/model/MCard.js.map +1 -0
- package/dist/model/constants.d.ts +45 -0
- package/dist/model/constants.d.ts.map +1 -0
- package/dist/model/constants.js +27 -0
- package/dist/model/constants.js.map +1 -0
- package/dist/model/detectors/BaseDetector.d.ts +26 -0
- package/dist/model/detectors/BaseDetector.d.ts.map +1 -0
- package/dist/model/detectors/BaseDetector.js +5 -0
- package/dist/model/detectors/BaseDetector.js.map +1 -0
- package/dist/model/detectors/BinaryDetector.d.ts +12 -0
- package/dist/model/detectors/BinaryDetector.d.ts.map +1 -0
- package/dist/model/detectors/BinaryDetector.js +82 -0
- package/dist/model/detectors/BinaryDetector.js.map +1 -0
- package/dist/model/detectors/ContentTypeInterpreter.d.ts +11 -0
- package/dist/model/detectors/ContentTypeInterpreter.d.ts.map +1 -0
- package/dist/model/detectors/ContentTypeInterpreter.js +51 -0
- package/dist/model/detectors/ContentTypeInterpreter.js.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts +29 -0
- package/dist/model/detectors/DataFormatDetectors.d.ts.map +1 -0
- package/dist/model/detectors/DataFormatDetectors.js +223 -0
- package/dist/model/detectors/DataFormatDetectors.js.map +1 -0
- package/dist/model/detectors/LanguageDetector.d.ts +11 -0
- package/dist/model/detectors/LanguageDetector.d.ts.map +1 -0
- package/dist/model/detectors/LanguageDetector.js +148 -0
- package/dist/model/detectors/LanguageDetector.js.map +1 -0
- package/dist/model/detectors/MarkupDetectors.d.ts +22 -0
- package/dist/model/detectors/MarkupDetectors.d.ts.map +1 -0
- package/dist/model/detectors/MarkupDetectors.js +132 -0
- package/dist/model/detectors/MarkupDetectors.js.map +1 -0
- package/dist/model/detectors/OBJDetector.d.ts +8 -0
- package/dist/model/detectors/OBJDetector.d.ts.map +1 -0
- package/dist/model/detectors/OBJDetector.js +48 -0
- package/dist/model/detectors/OBJDetector.js.map +1 -0
- package/dist/model/detectors/registry.d.ts +13 -0
- package/dist/model/detectors/registry.d.ts.map +1 -0
- package/dist/model/detectors/registry.js +67 -0
- package/dist/model/detectors/registry.js.map +1 -0
- package/dist/monads/Either.d.ts +51 -0
- package/dist/monads/Either.d.ts.map +1 -0
- package/dist/monads/Either.js +82 -0
- package/dist/monads/Either.js.map +1 -0
- package/dist/monads/IO.d.ts +38 -0
- package/dist/monads/IO.d.ts.map +1 -0
- package/dist/monads/IO.js +66 -0
- package/dist/monads/IO.js.map +1 -0
- package/dist/monads/Maybe.d.ts +45 -0
- package/dist/monads/Maybe.d.ts.map +1 -0
- package/dist/monads/Maybe.js +73 -0
- package/dist/monads/Maybe.js.map +1 -0
- package/dist/monads/Reader.d.ts +29 -0
- package/dist/monads/Reader.d.ts.map +1 -0
- package/dist/monads/Reader.js +44 -0
- package/dist/monads/Reader.js.map +1 -0
- package/dist/monads/State.d.ts +33 -0
- package/dist/monads/State.d.ts.map +1 -0
- package/dist/monads/State.js +50 -0
- package/dist/monads/State.js.map +1 -0
- package/dist/monads/Writer.d.ts +29 -0
- package/dist/monads/Writer.d.ts.map +1 -0
- package/dist/monads/Writer.js +46 -0
- package/dist/monads/Writer.js.map +1 -0
- package/dist/ptr/FaroSidecar.d.ts +56 -0
- package/dist/ptr/FaroSidecar.d.ts.map +1 -0
- package/dist/ptr/FaroSidecar.js +102 -0
- package/dist/ptr/FaroSidecar.js.map +1 -0
- package/dist/ptr/LensProtocol.d.ts +84 -0
- package/dist/ptr/LensProtocol.d.ts.map +1 -0
- package/dist/ptr/LensProtocol.js +98 -0
- package/dist/ptr/LensProtocol.js.map +1 -0
- package/dist/ptr/SandboxWorker.d.ts +54 -0
- package/dist/ptr/SandboxWorker.d.ts.map +1 -0
- package/dist/ptr/SandboxWorker.js +172 -0
- package/dist/ptr/SandboxWorker.js.map +1 -0
- package/dist/ptr/common_types.d.ts +39 -0
- package/dist/ptr/common_types.d.ts.map +1 -0
- package/dist/ptr/common_types.js +12 -0
- package/dist/ptr/common_types.js.map +1 -0
- package/dist/ptr/lambda/AlphaConversion.d.ts +42 -0
- package/dist/ptr/lambda/AlphaConversion.d.ts.map +1 -0
- package/dist/ptr/lambda/AlphaConversion.js +244 -0
- package/dist/ptr/lambda/AlphaConversion.js.map +1 -0
- package/dist/ptr/lambda/BetaReduction.d.ts +73 -0
- package/dist/ptr/lambda/BetaReduction.d.ts.map +1 -0
- package/dist/ptr/lambda/BetaReduction.js +322 -0
- package/dist/ptr/lambda/BetaReduction.js.map +1 -0
- package/dist/ptr/lambda/EtaConversion.d.ts +65 -0
- package/dist/ptr/lambda/EtaConversion.d.ts.map +1 -0
- package/dist/ptr/lambda/EtaConversion.js +228 -0
- package/dist/ptr/lambda/EtaConversion.js.map +1 -0
- package/dist/ptr/lambda/FreeVariables.d.ts +44 -0
- package/dist/ptr/lambda/FreeVariables.d.ts.map +1 -0
- package/dist/ptr/lambda/FreeVariables.js +207 -0
- package/dist/ptr/lambda/FreeVariables.js.map +1 -0
- package/dist/ptr/lambda/LambdaRuntime.d.ts +80 -0
- package/dist/ptr/lambda/LambdaRuntime.d.ts.map +1 -0
- package/dist/ptr/lambda/LambdaRuntime.js +433 -0
- package/dist/ptr/lambda/LambdaRuntime.js.map +1 -0
- package/dist/ptr/lambda/LambdaTerm.d.ts +95 -0
- package/dist/ptr/lambda/LambdaTerm.d.ts.map +1 -0
- package/dist/ptr/lambda/LambdaTerm.js +159 -0
- package/dist/ptr/lambda/LambdaTerm.js.map +1 -0
- package/dist/ptr/lambda/index.d.ts +24 -0
- package/dist/ptr/lambda/index.d.ts.map +1 -0
- package/dist/ptr/lambda/index.js +34 -0
- package/dist/ptr/lambda/index.js.map +1 -0
- package/dist/ptr/llm/Config.d.ts +57 -0
- package/dist/ptr/llm/Config.d.ts.map +1 -0
- package/dist/ptr/llm/Config.js +183 -0
- package/dist/ptr/llm/Config.js.map +1 -0
- package/dist/ptr/llm/LLMRuntime.d.ts +35 -0
- package/dist/ptr/llm/LLMRuntime.d.ts.map +1 -0
- package/dist/ptr/llm/LLMRuntime.js +176 -0
- package/dist/ptr/llm/LLMRuntime.js.map +1 -0
- package/dist/ptr/llm/providers/LLMProvider.d.ts +43 -0
- package/dist/ptr/llm/providers/LLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/LLMProvider.js +31 -0
- package/dist/ptr/llm/providers/LLMProvider.js.map +1 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.d.ts +22 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.js +155 -0
- package/dist/ptr/llm/providers/MLCLLMProvider.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts +20 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js +42 -0
- package/dist/ptr/llm/providers/OllamaEmbeddingProvider.js.map +1 -0
- package/dist/ptr/llm/providers/OllamaProvider.d.ts +21 -0
- package/dist/ptr/llm/providers/OllamaProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/OllamaProvider.js +158 -0
- package/dist/ptr/llm/providers/OllamaProvider.js.map +1 -0
- package/dist/ptr/llm/providers/WebLLMProvider.d.ts +22 -0
- package/dist/ptr/llm/providers/WebLLMProvider.d.ts.map +1 -0
- package/dist/ptr/llm/providers/WebLLMProvider.js +151 -0
- package/dist/ptr/llm/providers/WebLLMProvider.js.map +1 -0
- package/dist/ptr/node/Action.d.ts +426 -0
- package/dist/ptr/node/Action.d.ts.map +1 -0
- package/dist/ptr/node/Action.js +711 -0
- package/dist/ptr/node/Action.js.map +1 -0
- package/dist/ptr/node/CLMLoader.d.ts +18 -0
- package/dist/ptr/node/CLMLoader.d.ts.map +1 -0
- package/dist/ptr/node/CLMLoader.js +18 -0
- package/dist/ptr/node/CLMLoader.js.map +1 -0
- package/dist/ptr/node/CLMRunner.d.ts +34 -0
- package/dist/ptr/node/CLMRunner.d.ts.map +1 -0
- package/dist/ptr/node/CLMRunner.js +36 -0
- package/dist/ptr/node/CLMRunner.js.map +1 -0
- package/dist/ptr/node/FileSystemUtils.d.ts +40 -0
- package/dist/ptr/node/FileSystemUtils.d.ts.map +1 -0
- package/dist/ptr/node/FileSystemUtils.js +170 -0
- package/dist/ptr/node/FileSystemUtils.js.map +1 -0
- package/dist/ptr/node/NetworkConfig.d.ts +191 -0
- package/dist/ptr/node/NetworkConfig.d.ts.map +1 -0
- package/dist/ptr/node/NetworkConfig.js +8 -0
- package/dist/ptr/node/NetworkConfig.js.map +1 -0
- package/dist/ptr/node/NetworkRuntime.d.ts +38 -0
- package/dist/ptr/node/NetworkRuntime.d.ts.map +1 -0
- package/dist/ptr/node/NetworkRuntime.js +871 -0
- package/dist/ptr/node/NetworkRuntime.js.map +1 -0
- package/dist/ptr/node/P2PChatSession.d.ts +53 -0
- package/dist/ptr/node/P2PChatSession.d.ts.map +1 -0
- package/dist/ptr/node/P2PChatSession.js +154 -0
- package/dist/ptr/node/P2PChatSession.js.map +1 -0
- package/dist/ptr/node/RuntimeInterface.d.ts +4 -0
- package/dist/ptr/node/RuntimeInterface.d.ts.map +1 -0
- package/dist/ptr/node/RuntimeInterface.js +2 -0
- package/dist/ptr/node/RuntimeInterface.js.map +1 -0
- package/dist/ptr/node/Runtimes.d.ts +34 -0
- package/dist/ptr/node/Runtimes.d.ts.map +1 -0
- package/dist/ptr/node/Runtimes.js +38 -0
- package/dist/ptr/node/Runtimes.js.map +1 -0
- package/dist/ptr/node/SignalingServer.d.ts +37 -0
- package/dist/ptr/node/SignalingServer.d.ts.map +1 -0
- package/dist/ptr/node/SignalingServer.js +218 -0
- package/dist/ptr/node/SignalingServer.js.map +1 -0
- package/dist/ptr/node/cli.d.ts +3 -0
- package/dist/ptr/node/cli.d.ts.map +1 -0
- package/dist/ptr/node/cli.js +266 -0
- package/dist/ptr/node/cli.js.map +1 -0
- package/dist/ptr/node/clm/builtins/handle.d.ts +14 -0
- package/dist/ptr/node/clm/builtins/handle.d.ts.map +1 -0
- package/dist/ptr/node/clm/builtins/handle.js +177 -0
- package/dist/ptr/node/clm/builtins/handle.js.map +1 -0
- package/dist/ptr/node/clm/builtins/index.d.ts +20 -0
- package/dist/ptr/node/clm/builtins/index.d.ts.map +1 -0
- package/dist/ptr/node/clm/builtins/index.js +60 -0
- package/dist/ptr/node/clm/builtins/index.js.map +1 -0
- package/dist/ptr/node/clm/index.d.ts +25 -0
- package/dist/ptr/node/clm/index.d.ts.map +1 -0
- package/dist/ptr/node/clm/index.js +28 -0
- package/dist/ptr/node/clm/index.js.map +1 -0
- package/dist/ptr/node/clm/loader.d.ts +25 -0
- package/dist/ptr/node/clm/loader.d.ts.map +1 -0
- package/dist/ptr/node/clm/loader.js +146 -0
- package/dist/ptr/node/clm/loader.js.map +1 -0
- package/dist/ptr/node/clm/multiruntime.d.ts +9 -0
- package/dist/ptr/node/clm/multiruntime.d.ts.map +1 -0
- package/dist/ptr/node/clm/multiruntime.js +121 -0
- package/dist/ptr/node/clm/multiruntime.js.map +1 -0
- package/dist/ptr/node/clm/runner.d.ts +70 -0
- package/dist/ptr/node/clm/runner.d.ts.map +1 -0
- package/dist/ptr/node/clm/runner.js +324 -0
- package/dist/ptr/node/clm/runner.js.map +1 -0
- package/dist/ptr/node/clm/types.d.ts +166 -0
- package/dist/ptr/node/clm/types.d.ts.map +1 -0
- package/dist/ptr/node/clm/types.js +5 -0
- package/dist/ptr/node/clm/types.js.map +1 -0
- package/dist/ptr/node/clm/utils.d.ts +29 -0
- package/dist/ptr/node/clm/utils.d.ts.map +1 -0
- package/dist/ptr/node/clm/utils.js +88 -0
- package/dist/ptr/node/clm/utils.js.map +1 -0
- package/dist/ptr/node/network/HttpClient.d.ts +14 -0
- package/dist/ptr/node/network/HttpClient.d.ts.map +1 -0
- package/dist/ptr/node/network/HttpClient.js +139 -0
- package/dist/ptr/node/network/HttpClient.js.map +1 -0
- package/dist/ptr/node/network/MCardSerialization.d.ts +19 -0
- package/dist/ptr/node/network/MCardSerialization.d.ts.map +1 -0
- package/dist/ptr/node/network/MCardSerialization.js +41 -0
- package/dist/ptr/node/network/MCardSerialization.js.map +1 -0
- package/dist/ptr/node/network/NetworkInfrastructure.d.ts +37 -0
- package/dist/ptr/node/network/NetworkInfrastructure.d.ts.map +1 -0
- package/dist/ptr/node/network/NetworkInfrastructure.js +121 -0
- package/dist/ptr/node/network/NetworkInfrastructure.js.map +1 -0
- package/dist/ptr/node/network/NetworkSecurity.d.ts +24 -0
- package/dist/ptr/node/network/NetworkSecurity.d.ts.map +1 -0
- package/dist/ptr/node/network/NetworkSecurity.js +104 -0
- package/dist/ptr/node/network/NetworkSecurity.js.map +1 -0
- package/dist/ptr/node/runtimes/base.d.ts +31 -0
- package/dist/ptr/node/runtimes/base.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/base.js +33 -0
- package/dist/ptr/node/runtimes/base.js.map +1 -0
- package/dist/ptr/node/runtimes/binary.d.ts +10 -0
- package/dist/ptr/node/runtimes/binary.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/binary.js +16 -0
- package/dist/ptr/node/runtimes/binary.js.map +1 -0
- package/dist/ptr/node/runtimes/factory.d.ts +22 -0
- package/dist/ptr/node/runtimes/factory.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/factory.js +152 -0
- package/dist/ptr/node/runtimes/factory.js.map +1 -0
- package/dist/ptr/node/runtimes/index.d.ts +28 -0
- package/dist/ptr/node/runtimes/index.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/index.js +30 -0
- package/dist/ptr/node/runtimes/index.js.map +1 -0
- package/dist/ptr/node/runtimes/javascript.d.ts +22 -0
- package/dist/ptr/node/runtimes/javascript.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/javascript.js +125 -0
- package/dist/ptr/node/runtimes/javascript.js.map +1 -0
- package/dist/ptr/node/runtimes/lean.d.ts +10 -0
- package/dist/ptr/node/runtimes/lean.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/lean.js +60 -0
- package/dist/ptr/node/runtimes/lean.js.map +1 -0
- package/dist/ptr/node/runtimes/loader.d.ts +21 -0
- package/dist/ptr/node/runtimes/loader.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/loader.js +126 -0
- package/dist/ptr/node/runtimes/loader.js.map +1 -0
- package/dist/ptr/node/runtimes/python.d.ts +14 -0
- package/dist/ptr/node/runtimes/python.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/python.js +100 -0
- package/dist/ptr/node/runtimes/python.js.map +1 -0
- package/dist/ptr/node/runtimes/wasm.d.ts +10 -0
- package/dist/ptr/node/runtimes/wasm.d.ts.map +1 -0
- package/dist/ptr/node/runtimes/wasm.js +55 -0
- package/dist/ptr/node/runtimes/wasm.js.map +1 -0
- package/dist/rag/GraphRAGEngine.d.ts +26 -0
- package/dist/rag/GraphRAGEngine.d.ts.map +1 -0
- package/dist/rag/GraphRAGEngine.js +166 -0
- package/dist/rag/GraphRAGEngine.js.map +1 -0
- package/dist/rag/HandleVectorStore.d.ts +201 -0
- package/dist/rag/HandleVectorStore.d.ts.map +1 -0
- package/dist/rag/HandleVectorStore.js +527 -0
- package/dist/rag/HandleVectorStore.js.map +1 -0
- package/dist/rag/PersistentIndexer.d.ts +148 -0
- package/dist/rag/PersistentIndexer.d.ts.map +1 -0
- package/dist/rag/PersistentIndexer.js +302 -0
- package/dist/rag/PersistentIndexer.js.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts +87 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.d.ts.map +1 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js +164 -0
- package/dist/rag/embeddings/VisionEmbeddingProvider.js.map +1 -0
- package/dist/rag/graph/community.d.ts +56 -0
- package/dist/rag/graph/community.d.ts.map +1 -0
- package/dist/rag/graph/community.js +247 -0
- package/dist/rag/graph/community.js.map +1 -0
- package/dist/rag/graph/extractor.d.ts +99 -0
- package/dist/rag/graph/extractor.d.ts.map +1 -0
- package/dist/rag/graph/extractor.js +210 -0
- package/dist/rag/graph/extractor.js.map +1 -0
- package/dist/rag/graph/store.d.ts +176 -0
- package/dist/rag/graph/store.d.ts.map +1 -0
- package/dist/rag/graph/store.js +504 -0
- package/dist/rag/graph/store.js.map +1 -0
- package/dist/rag/index.d.ts +20 -0
- package/dist/rag/index.d.ts.map +1 -0
- package/dist/rag/index.js +26 -0
- package/dist/rag/index.js.map +1 -0
- package/dist/rag/semanticVersioning.d.ts +187 -0
- package/dist/rag/semanticVersioning.d.ts.map +1 -0
- package/dist/rag/semanticVersioning.js +253 -0
- package/dist/rag/semanticVersioning.js.map +1 -0
- package/dist/storage/IndexedDBEngine.d.ts +33 -0
- package/dist/storage/IndexedDBEngine.d.ts.map +1 -0
- package/dist/storage/IndexedDBEngine.js +198 -0
- package/dist/storage/IndexedDBEngine.js.map +1 -0
- package/dist/storage/SqliteNodeEngine.d.ts +123 -0
- package/dist/storage/SqliteNodeEngine.d.ts.map +1 -0
- package/dist/storage/SqliteNodeEngine.js +385 -0
- package/dist/storage/SqliteNodeEngine.js.map +1 -0
- package/dist/storage/SqliteWasmEngine.d.ts +60 -0
- package/dist/storage/SqliteWasmEngine.d.ts.map +1 -0
- package/dist/storage/SqliteWasmEngine.js +193 -0
- package/dist/storage/SqliteWasmEngine.js.map +1 -0
- package/dist/storage/StorageAdapter.d.ts +42 -0
- package/dist/storage/StorageAdapter.d.ts.map +1 -0
- package/dist/storage/StorageAdapter.js +2 -0
- package/dist/storage/StorageAdapter.js.map +1 -0
- package/dist/storage/VectorStore.d.ts +202 -0
- package/dist/storage/VectorStore.d.ts.map +1 -0
- package/dist/storage/VectorStore.js +557 -0
- package/dist/storage/VectorStore.js.map +1 -0
- package/dist/storage/schema.d.ts +162 -0
- package/dist/storage/schema.d.ts.map +1 -0
- package/dist/storage/schema.js +373 -0
- package/dist/storage/schema.js.map +1 -0
- package/dist/util/FileIO.d.ts +44 -0
- package/dist/util/FileIO.d.ts.map +1 -0
- package/dist/util/FileIO.js +203 -0
- package/dist/util/FileIO.js.map +1 -0
- package/dist/util/Loader.d.ts +34 -0
- package/dist/util/Loader.d.ts.map +1 -0
- package/dist/util/Loader.js +168 -0
- package/dist/util/Loader.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BetaReduction.js","sourceRoot":"","sources":["../../../src/ptr/lambda/BetaReduction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eta Conversion (η-conversion)
|
|
3
|
+
*
|
|
4
|
+
* Captures extensional equality of functions.
|
|
5
|
+
*
|
|
6
|
+
* η-reduction: λx.(f x) →η f (if x ∉ FV(f))
|
|
7
|
+
* η-expansion: f →η λx.(f x) (where x is fresh)
|
|
8
|
+
*
|
|
9
|
+
* Two functions are η-equivalent if they produce the same output for all inputs.
|
|
10
|
+
* This is the principle of extensionality: functions are determined by their behavior.
|
|
11
|
+
*
|
|
12
|
+
* @module mcard-js/ptr/lambda/EtaConversion
|
|
13
|
+
*/
|
|
14
|
+
import { CardCollection } from '../../model/CardCollection';
|
|
15
|
+
import { IO } from '../../monads/IO';
|
|
16
|
+
import { Either } from '../../monads/Either';
|
|
17
|
+
import { Maybe } from '../../monads/Maybe';
|
|
18
|
+
/**
|
|
19
|
+
* Check if a term is an η-redex: λx.(f x) where x ∉ FV(f)
|
|
20
|
+
*/
|
|
21
|
+
export declare function isEtaRedex(collection: CardCollection, termHash: string): IO<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
* Eta reduction: λx.(f x) →η f
|
|
24
|
+
*
|
|
25
|
+
* Only valid if x does not occur free in f.
|
|
26
|
+
*
|
|
27
|
+
* @param collection - Card collection
|
|
28
|
+
* @param termHash - Hash of the abstraction λx.(f x)
|
|
29
|
+
* @returns Maybe<resultHash> - Nothing if not an η-redex
|
|
30
|
+
*/
|
|
31
|
+
export declare function etaReduce(collection: CardCollection, termHash: string): IO<Maybe<string>>;
|
|
32
|
+
/**
|
|
33
|
+
* Try eta reduction, returning Either for error handling
|
|
34
|
+
*/
|
|
35
|
+
export declare function etaReduceE(collection: CardCollection, termHash: string): IO<Either<string, string>>;
|
|
36
|
+
/**
|
|
37
|
+
* Eta expansion: f →η λx.(f x)
|
|
38
|
+
*
|
|
39
|
+
* Wraps a function in a lambda that immediately applies it.
|
|
40
|
+
* The new variable must be fresh (not occurring in f).
|
|
41
|
+
*
|
|
42
|
+
* @param collection - Card collection
|
|
43
|
+
* @param termHash - Hash of the term to expand
|
|
44
|
+
* @param baseName - Base name for the fresh variable (default: 'x')
|
|
45
|
+
* @returns Hash of the expanded term λx.(f x)
|
|
46
|
+
*/
|
|
47
|
+
export declare function etaExpand(collection: CardCollection, termHash: string, baseName?: string): IO<string>;
|
|
48
|
+
/**
|
|
49
|
+
* Check if two terms are η-equivalent
|
|
50
|
+
*
|
|
51
|
+
* Two terms f and g are η-equivalent if:
|
|
52
|
+
* - They are the same, or
|
|
53
|
+
* - One η-reduces to the other, or
|
|
54
|
+
* - They both η-expand to equivalent terms
|
|
55
|
+
*/
|
|
56
|
+
export declare function etaEquivalent(collection: CardCollection, hash1: string, hash2: string): IO<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Eta-normalize a term by reducing all η-redexes
|
|
59
|
+
*/
|
|
60
|
+
export declare function etaNormalize(collection: CardCollection, termHash: string): IO<string>;
|
|
61
|
+
/**
|
|
62
|
+
* Find all η-redexes in a term
|
|
63
|
+
*/
|
|
64
|
+
export declare function findEtaRedexes(collection: CardCollection, termHash: string): IO<string[]>;
|
|
65
|
+
//# sourceMappingURL=EtaConversion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EtaConversion.d.ts","sourceRoot":"","sources":["../../../src/ptr/lambda/EtaConversion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAa5D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C;;GAEG;AACH,wBAAgB,UAAU,CACtB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,OAAO,CAAC,CAkBb;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACrB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAiCnB;AAED;;GAEG;AACH,wBAAgB,UAAU,CACtB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO5B;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACrB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAY,GACvB,EAAE,CAAC,MAAM,CAAC,CAmBZ;AAMD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CACzB,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACd,EAAE,CAAC,OAAO,CAAC,CAWb;AAgDD;;GAEG;AACH,wBAAgB,YAAY,CACxB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,MAAM,CAAC,CAEZ;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,MAAM,EAAE,CAAC,CAMd"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Eta Conversion (η-conversion)
|
|
3
|
+
*
|
|
4
|
+
* Captures extensional equality of functions.
|
|
5
|
+
*
|
|
6
|
+
* η-reduction: λx.(f x) →η f (if x ∉ FV(f))
|
|
7
|
+
* η-expansion: f →η λx.(f x) (where x is fresh)
|
|
8
|
+
*
|
|
9
|
+
* Two functions are η-equivalent if they produce the same output for all inputs.
|
|
10
|
+
* This is the principle of extensionality: functions are determined by their behavior.
|
|
11
|
+
*
|
|
12
|
+
* @module mcard-js/ptr/lambda/EtaConversion
|
|
13
|
+
*/
|
|
14
|
+
import { loadTerm, storeTerm, mkVar, mkAbs, mkApp, isVar, isAbs, isApp } from './LambdaTerm';
|
|
15
|
+
import { freeVariables, generateFreshFor } from './FreeVariables';
|
|
16
|
+
import { IO } from '../../monads/IO';
|
|
17
|
+
import { Either } from '../../monads/Either';
|
|
18
|
+
import { Maybe } from '../../monads/Maybe';
|
|
19
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
20
|
+
// Eta Redex Detection
|
|
21
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
22
|
+
/**
|
|
23
|
+
* Check if a term is an η-redex: λx.(f x) where x ∉ FV(f)
|
|
24
|
+
*/
|
|
25
|
+
export function isEtaRedex(collection, termHash) {
|
|
26
|
+
return IO.of(async () => {
|
|
27
|
+
const term = await loadTerm(collection, termHash);
|
|
28
|
+
if (!term || !isAbs(term))
|
|
29
|
+
return false;
|
|
30
|
+
const body = await loadTerm(collection, term.body);
|
|
31
|
+
if (!body || !isApp(body))
|
|
32
|
+
return false;
|
|
33
|
+
// Check if argument is the bound variable
|
|
34
|
+
const arg = await loadTerm(collection, body.arg);
|
|
35
|
+
if (!arg || !isVar(arg) || arg.name !== term.param)
|
|
36
|
+
return false;
|
|
37
|
+
// Check if x is not free in f
|
|
38
|
+
const funcFV = await freeVariables(collection, body.func).run();
|
|
39
|
+
if (funcFV.isNothing)
|
|
40
|
+
return false;
|
|
41
|
+
return !funcFV.value.has(term.param);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
45
|
+
// Eta Reduction
|
|
46
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
47
|
+
/**
|
|
48
|
+
* Eta reduction: λx.(f x) →η f
|
|
49
|
+
*
|
|
50
|
+
* Only valid if x does not occur free in f.
|
|
51
|
+
*
|
|
52
|
+
* @param collection - Card collection
|
|
53
|
+
* @param termHash - Hash of the abstraction λx.(f x)
|
|
54
|
+
* @returns Maybe<resultHash> - Nothing if not an η-redex
|
|
55
|
+
*/
|
|
56
|
+
export function etaReduce(collection, termHash) {
|
|
57
|
+
return IO.of(async () => {
|
|
58
|
+
const term = await loadTerm(collection, termHash);
|
|
59
|
+
if (!term)
|
|
60
|
+
return Maybe.nothing();
|
|
61
|
+
// Must be λx.E
|
|
62
|
+
if (!isAbs(term))
|
|
63
|
+
return Maybe.nothing();
|
|
64
|
+
const body = await loadTerm(collection, term.body);
|
|
65
|
+
if (!body)
|
|
66
|
+
return Maybe.nothing();
|
|
67
|
+
// Body must be application (f x)
|
|
68
|
+
if (!isApp(body))
|
|
69
|
+
return Maybe.nothing();
|
|
70
|
+
// Argument must be the bound variable
|
|
71
|
+
const arg = await loadTerm(collection, body.arg);
|
|
72
|
+
if (!arg)
|
|
73
|
+
return Maybe.nothing();
|
|
74
|
+
if (!isVar(arg) || arg.name !== term.param) {
|
|
75
|
+
return Maybe.nothing();
|
|
76
|
+
}
|
|
77
|
+
// x must not be free in f
|
|
78
|
+
const funcFV = await freeVariables(collection, body.func).run();
|
|
79
|
+
if (funcFV.isNothing)
|
|
80
|
+
return Maybe.nothing();
|
|
81
|
+
if (funcFV.value.has(term.param)) {
|
|
82
|
+
return Maybe.nothing();
|
|
83
|
+
}
|
|
84
|
+
// η-reduce: return f's hash
|
|
85
|
+
return Maybe.just(body.func);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Try eta reduction, returning Either for error handling
|
|
90
|
+
*/
|
|
91
|
+
export function etaReduceE(collection, termHash) {
|
|
92
|
+
return etaReduce(collection, termHash).map(maybe => {
|
|
93
|
+
if (maybe.isNothing) {
|
|
94
|
+
return Either.left('Not an η-redex');
|
|
95
|
+
}
|
|
96
|
+
return Either.right(maybe.value);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
100
|
+
// Eta Expansion
|
|
101
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
102
|
+
/**
|
|
103
|
+
* Eta expansion: f →η λx.(f x)
|
|
104
|
+
*
|
|
105
|
+
* Wraps a function in a lambda that immediately applies it.
|
|
106
|
+
* The new variable must be fresh (not occurring in f).
|
|
107
|
+
*
|
|
108
|
+
* @param collection - Card collection
|
|
109
|
+
* @param termHash - Hash of the term to expand
|
|
110
|
+
* @param baseName - Base name for the fresh variable (default: 'x')
|
|
111
|
+
* @returns Hash of the expanded term λx.(f x)
|
|
112
|
+
*/
|
|
113
|
+
export function etaExpand(collection, termHash, baseName = 'x') {
|
|
114
|
+
return IO.of(async () => {
|
|
115
|
+
// Generate fresh variable name
|
|
116
|
+
const freshVar = await generateFreshFor(collection, baseName, termHash);
|
|
117
|
+
// Create variable term
|
|
118
|
+
const varTerm = mkVar(freshVar);
|
|
119
|
+
const varHash = await storeTerm(collection, varTerm);
|
|
120
|
+
// Create application (f x)
|
|
121
|
+
const appTerm = mkApp(termHash, varHash);
|
|
122
|
+
const appHash = await storeTerm(collection, appTerm);
|
|
123
|
+
// Create abstraction λx.(f x)
|
|
124
|
+
const absTerm = mkAbs(freshVar, appHash);
|
|
125
|
+
const absHash = await storeTerm(collection, absTerm);
|
|
126
|
+
return absHash;
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
130
|
+
// Eta Equivalence
|
|
131
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
132
|
+
/**
|
|
133
|
+
* Check if two terms are η-equivalent
|
|
134
|
+
*
|
|
135
|
+
* Two terms f and g are η-equivalent if:
|
|
136
|
+
* - They are the same, or
|
|
137
|
+
* - One η-reduces to the other, or
|
|
138
|
+
* - They both η-expand to equivalent terms
|
|
139
|
+
*/
|
|
140
|
+
export function etaEquivalent(collection, hash1, hash2) {
|
|
141
|
+
return IO.of(async () => {
|
|
142
|
+
// Same hash = definitely equivalent
|
|
143
|
+
if (hash1 === hash2)
|
|
144
|
+
return true;
|
|
145
|
+
// Try reducing both to see if they meet
|
|
146
|
+
const reduced1 = await etaReduceDeep(collection, hash1);
|
|
147
|
+
const reduced2 = await etaReduceDeep(collection, hash2);
|
|
148
|
+
return reduced1 === reduced2;
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Recursively apply η-reduction until no more η-redexes
|
|
153
|
+
*/
|
|
154
|
+
async function etaReduceDeep(collection, termHash) {
|
|
155
|
+
const term = await loadTerm(collection, termHash);
|
|
156
|
+
if (!term)
|
|
157
|
+
return termHash;
|
|
158
|
+
switch (term.tag) {
|
|
159
|
+
case 'Var':
|
|
160
|
+
return termHash;
|
|
161
|
+
case 'Abs': {
|
|
162
|
+
// First try η-reduction at this level
|
|
163
|
+
const etaResult = await etaReduce(collection, termHash).run();
|
|
164
|
+
if (etaResult.isJust) {
|
|
165
|
+
// η-reduced - continue reducing the result
|
|
166
|
+
return etaReduceDeep(collection, etaResult.value);
|
|
167
|
+
}
|
|
168
|
+
// Not an η-redex - recurse into body
|
|
169
|
+
const newBody = await etaReduceDeep(collection, term.body);
|
|
170
|
+
if (newBody === term.body)
|
|
171
|
+
return termHash;
|
|
172
|
+
const newAbs = mkAbs(term.param, newBody);
|
|
173
|
+
return storeTerm(collection, newAbs);
|
|
174
|
+
}
|
|
175
|
+
case 'App': {
|
|
176
|
+
const newFunc = await etaReduceDeep(collection, term.func);
|
|
177
|
+
const newArg = await etaReduceDeep(collection, term.arg);
|
|
178
|
+
if (newFunc === term.func && newArg === term.arg)
|
|
179
|
+
return termHash;
|
|
180
|
+
const newApp = mkApp(newFunc, newArg);
|
|
181
|
+
return storeTerm(collection, newApp);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
186
|
+
// Combined Eta Operations
|
|
187
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
188
|
+
/**
|
|
189
|
+
* Eta-normalize a term by reducing all η-redexes
|
|
190
|
+
*/
|
|
191
|
+
export function etaNormalize(collection, termHash) {
|
|
192
|
+
return IO.of(() => etaReduceDeep(collection, termHash));
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Find all η-redexes in a term
|
|
196
|
+
*/
|
|
197
|
+
export function findEtaRedexes(collection, termHash) {
|
|
198
|
+
return IO.of(async () => {
|
|
199
|
+
const redexes = [];
|
|
200
|
+
await collectEtaRedexes(collection, termHash, redexes);
|
|
201
|
+
return redexes;
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
async function collectEtaRedexes(collection, termHash, redexes) {
|
|
205
|
+
const term = await loadTerm(collection, termHash);
|
|
206
|
+
if (!term)
|
|
207
|
+
return;
|
|
208
|
+
switch (term.tag) {
|
|
209
|
+
case 'Var':
|
|
210
|
+
break;
|
|
211
|
+
case 'Abs': {
|
|
212
|
+
// Check if this is an η-redex
|
|
213
|
+
const isRedex = await isEtaRedex(collection, termHash).run();
|
|
214
|
+
if (isRedex) {
|
|
215
|
+
redexes.push(termHash);
|
|
216
|
+
}
|
|
217
|
+
// Also check body
|
|
218
|
+
await collectEtaRedexes(collection, term.body, redexes);
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case 'App': {
|
|
222
|
+
await collectEtaRedexes(collection, term.func, redexes);
|
|
223
|
+
await collectEtaRedexes(collection, term.arg, redexes);
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=EtaConversion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EtaConversion.js","sourceRoot":"","sources":["../../../src/ptr/lambda/EtaConversion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Free Variables Analysis
|
|
3
|
+
*
|
|
4
|
+
* Computes the set of free variables in a Lambda term.
|
|
5
|
+
* Free variables are those not bound by any enclosing λ.
|
|
6
|
+
*
|
|
7
|
+
* FV(x) = {x}
|
|
8
|
+
* FV(λx.M) = FV(M) \ {x}
|
|
9
|
+
* FV(M N) = FV(M) ∪ FV(N)
|
|
10
|
+
*
|
|
11
|
+
* @module mcard-js/ptr/lambda/FreeVariables
|
|
12
|
+
*/
|
|
13
|
+
import { CardCollection } from '../../model/CardCollection';
|
|
14
|
+
import { IO } from '../../monads/IO';
|
|
15
|
+
import { Maybe } from '../../monads/Maybe';
|
|
16
|
+
/**
|
|
17
|
+
* Compute free variables of a term (by hash)
|
|
18
|
+
* Returns IO<Maybe<Set<string>>> - Nothing if term not found
|
|
19
|
+
*/
|
|
20
|
+
export declare function freeVariables(collection: CardCollection, termHash: string): IO<Maybe<Set<string>>>;
|
|
21
|
+
/**
|
|
22
|
+
* Compute bound variables of a term (by hash)
|
|
23
|
+
* Bound variables are those occurring in binding positions (λx)
|
|
24
|
+
*/
|
|
25
|
+
export declare function boundVariables(collection: CardCollection, termHash: string): IO<Maybe<Set<string>>>;
|
|
26
|
+
/**
|
|
27
|
+
* Check if a variable is free in a term
|
|
28
|
+
*/
|
|
29
|
+
export declare function isFreeIn(collection: CardCollection, variable: string, termHash: string): IO<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Check if a term is closed (has no free variables)
|
|
32
|
+
*/
|
|
33
|
+
export declare function isClosed(collection: CardCollection, termHash: string): IO<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Generate a fresh variable name that is not in the given set
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateFresh(base: string, avoid: Set<string>): string;
|
|
38
|
+
/**
|
|
39
|
+
* Generate a fresh variable avoiding all variables in a term
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateFreshFor(collection: CardCollection, base: string, termHash: string): Promise<string>;
|
|
42
|
+
export declare function difference<T>(a: Set<T>, b: Set<T>): Set<T>;
|
|
43
|
+
export declare function intersection<T>(a: Set<T>, b: Set<T>): Set<T>;
|
|
44
|
+
//# sourceMappingURL=FreeVariables.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FreeVariables.d.ts","sourceRoot":"","sources":["../../../src/ptr/lambda/FreeVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAM3C;;;GAGG;AACH,wBAAgB,aAAa,CACzB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAKxB;AAqED;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAIxB;AAkDD;;GAEG;AACH,wBAAgB,QAAQ,CACpB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,OAAO,CAAC,CAKb;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACpB,UAAU,EAAE,cAAc,EAC1B,QAAQ,EAAE,MAAM,GACjB,EAAE,CAAC,OAAO,CAAC,CAKb;AAMD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CActE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,UAAU,EAAE,cAAc,EAC1B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAcjB;AAcD,wBAAgB,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAQ1D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAQ5D"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Free Variables Analysis
|
|
3
|
+
*
|
|
4
|
+
* Computes the set of free variables in a Lambda term.
|
|
5
|
+
* Free variables are those not bound by any enclosing λ.
|
|
6
|
+
*
|
|
7
|
+
* FV(x) = {x}
|
|
8
|
+
* FV(λx.M) = FV(M) \ {x}
|
|
9
|
+
* FV(M N) = FV(M) ∪ FV(N)
|
|
10
|
+
*
|
|
11
|
+
* @module mcard-js/ptr/lambda/FreeVariables
|
|
12
|
+
*/
|
|
13
|
+
import { loadTerm } from './LambdaTerm';
|
|
14
|
+
import { IO } from '../../monads/IO';
|
|
15
|
+
import { Maybe } from '../../monads/Maybe';
|
|
16
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
17
|
+
// Free Variable Computation
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Compute free variables of a term (by hash)
|
|
21
|
+
* Returns IO<Maybe<Set<string>>> - Nothing if term not found
|
|
22
|
+
*/
|
|
23
|
+
export function freeVariables(collection, termHash) {
|
|
24
|
+
return IO.of(async () => {
|
|
25
|
+
const result = await computeFreeVars(collection, termHash, new Set());
|
|
26
|
+
return result;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Internal recursive implementation with memoization via visited set
|
|
31
|
+
*/
|
|
32
|
+
async function computeFreeVars(collection, termHash, visited) {
|
|
33
|
+
// Cycle detection
|
|
34
|
+
if (visited.has(termHash)) {
|
|
35
|
+
return Maybe.just(new Set());
|
|
36
|
+
}
|
|
37
|
+
visited.add(termHash);
|
|
38
|
+
const term = await loadTerm(collection, termHash);
|
|
39
|
+
if (!term) {
|
|
40
|
+
return Maybe.nothing();
|
|
41
|
+
}
|
|
42
|
+
return Maybe.just(await freeVarsOfTerm(collection, term, visited));
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Compute free variables of a term structure
|
|
46
|
+
*/
|
|
47
|
+
async function freeVarsOfTerm(collection, term, visited) {
|
|
48
|
+
switch (term.tag) {
|
|
49
|
+
case 'Var':
|
|
50
|
+
// FV(x) = {x}
|
|
51
|
+
return new Set([term.name]);
|
|
52
|
+
case 'Abs': {
|
|
53
|
+
// FV(λx.M) = FV(M) \ {x}
|
|
54
|
+
const bodyFV = await computeFreeVars(collection, term.body, visited);
|
|
55
|
+
if (bodyFV.isNothing) {
|
|
56
|
+
throw new Error(`Body term not found: ${term.body}`);
|
|
57
|
+
}
|
|
58
|
+
const result = new Set(bodyFV.value);
|
|
59
|
+
result.delete(term.param);
|
|
60
|
+
return result;
|
|
61
|
+
}
|
|
62
|
+
case 'App': {
|
|
63
|
+
// FV(M N) = FV(M) ∪ FV(N)
|
|
64
|
+
const funcFV = await computeFreeVars(collection, term.func, visited);
|
|
65
|
+
const argFV = await computeFreeVars(collection, term.arg, visited);
|
|
66
|
+
if (funcFV.isNothing) {
|
|
67
|
+
throw new Error(`Function term not found: ${term.func}`);
|
|
68
|
+
}
|
|
69
|
+
if (argFV.isNothing) {
|
|
70
|
+
throw new Error(`Argument term not found: ${term.arg}`);
|
|
71
|
+
}
|
|
72
|
+
return union(funcFV.value, argFV.value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
77
|
+
// Bound Variables
|
|
78
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
79
|
+
/**
|
|
80
|
+
* Compute bound variables of a term (by hash)
|
|
81
|
+
* Bound variables are those occurring in binding positions (λx)
|
|
82
|
+
*/
|
|
83
|
+
export function boundVariables(collection, termHash) {
|
|
84
|
+
return IO.of(async () => {
|
|
85
|
+
return computeBoundVars(collection, termHash, new Set());
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
async function computeBoundVars(collection, termHash, visited) {
|
|
89
|
+
if (visited.has(termHash)) {
|
|
90
|
+
return Maybe.just(new Set());
|
|
91
|
+
}
|
|
92
|
+
visited.add(termHash);
|
|
93
|
+
const term = await loadTerm(collection, termHash);
|
|
94
|
+
if (!term) {
|
|
95
|
+
return Maybe.nothing();
|
|
96
|
+
}
|
|
97
|
+
switch (term.tag) {
|
|
98
|
+
case 'Var':
|
|
99
|
+
// No bound variables in a variable
|
|
100
|
+
return Maybe.just(new Set());
|
|
101
|
+
case 'Abs': {
|
|
102
|
+
// BV(λx.M) = {x} ∪ BV(M)
|
|
103
|
+
const bodyBV = await computeBoundVars(collection, term.body, visited);
|
|
104
|
+
if (bodyBV.isNothing)
|
|
105
|
+
return bodyBV;
|
|
106
|
+
const result = new Set(bodyBV.value);
|
|
107
|
+
result.add(term.param);
|
|
108
|
+
return Maybe.just(result);
|
|
109
|
+
}
|
|
110
|
+
case 'App': {
|
|
111
|
+
// BV(M N) = BV(M) ∪ BV(N)
|
|
112
|
+
const funcBV = await computeBoundVars(collection, term.func, visited);
|
|
113
|
+
const argBV = await computeBoundVars(collection, term.arg, visited);
|
|
114
|
+
if (funcBV.isNothing || argBV.isNothing) {
|
|
115
|
+
return Maybe.nothing();
|
|
116
|
+
}
|
|
117
|
+
return Maybe.just(union(funcBV.value, argBV.value));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
122
|
+
// Utility: Check if variable is free in term
|
|
123
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
124
|
+
/**
|
|
125
|
+
* Check if a variable is free in a term
|
|
126
|
+
*/
|
|
127
|
+
export function isFreeIn(collection, variable, termHash) {
|
|
128
|
+
return freeVariables(collection, termHash).map(maybeFV => {
|
|
129
|
+
if (maybeFV.isNothing)
|
|
130
|
+
return false;
|
|
131
|
+
return maybeFV.value.has(variable);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Check if a term is closed (has no free variables)
|
|
136
|
+
*/
|
|
137
|
+
export function isClosed(collection, termHash) {
|
|
138
|
+
return freeVariables(collection, termHash).map(maybeFV => {
|
|
139
|
+
if (maybeFV.isNothing)
|
|
140
|
+
return false;
|
|
141
|
+
return maybeFV.value.size === 0;
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
145
|
+
// Fresh Variable Generation
|
|
146
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
147
|
+
/**
|
|
148
|
+
* Generate a fresh variable name that is not in the given set
|
|
149
|
+
*/
|
|
150
|
+
export function generateFresh(base, avoid) {
|
|
151
|
+
if (!avoid.has(base)) {
|
|
152
|
+
return base;
|
|
153
|
+
}
|
|
154
|
+
let counter = 1;
|
|
155
|
+
let candidate = `${base}${counter}`;
|
|
156
|
+
while (avoid.has(candidate)) {
|
|
157
|
+
counter++;
|
|
158
|
+
candidate = `${base}${counter}`;
|
|
159
|
+
}
|
|
160
|
+
return candidate;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Generate a fresh variable avoiding all variables in a term
|
|
164
|
+
*/
|
|
165
|
+
export async function generateFreshFor(collection, base, termHash) {
|
|
166
|
+
const fvResult = await freeVariables(collection, termHash).run();
|
|
167
|
+
const bvResult = await boundVariables(collection, termHash).run();
|
|
168
|
+
const avoid = new Set();
|
|
169
|
+
if (fvResult.isJust) {
|
|
170
|
+
for (const v of fvResult.value)
|
|
171
|
+
avoid.add(v);
|
|
172
|
+
}
|
|
173
|
+
if (bvResult.isJust) {
|
|
174
|
+
for (const v of bvResult.value)
|
|
175
|
+
avoid.add(v);
|
|
176
|
+
}
|
|
177
|
+
return generateFresh(base, avoid);
|
|
178
|
+
}
|
|
179
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
180
|
+
// Set Utilities
|
|
181
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
182
|
+
function union(a, b) {
|
|
183
|
+
const result = new Set(a);
|
|
184
|
+
for (const item of b) {
|
|
185
|
+
result.add(item);
|
|
186
|
+
}
|
|
187
|
+
return result;
|
|
188
|
+
}
|
|
189
|
+
export function difference(a, b) {
|
|
190
|
+
const result = new Set();
|
|
191
|
+
for (const item of a) {
|
|
192
|
+
if (!b.has(item)) {
|
|
193
|
+
result.add(item);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return result;
|
|
197
|
+
}
|
|
198
|
+
export function intersection(a, b) {
|
|
199
|
+
const result = new Set();
|
|
200
|
+
for (const item of a) {
|
|
201
|
+
if (b.has(item)) {
|
|
202
|
+
result.add(item);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=FreeVariables.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FreeVariables.js","sourceRoot":"","sources":["../../../src/ptr/lambda/FreeVariables.ts"],"names":[],"mappings":"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"}
|