lambda-calculus 2.2.3__py3-none-any.whl → 3.1.0__py3-none-any.whl

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.
@@ -4,7 +4,7 @@
4
4
 
5
5
  from .terms import Variable, Abstraction, Application
6
6
 
7
- __version__ = "2.2.3"
7
+ __version__ = "3.1.0"
8
8
  __author__ = "Eric Niklas Wolf"
9
9
  __email__ = "eric_niklas.wolf@mailbox.tu-dresden.de"
10
10
  __all__ = (
@@ -6,7 +6,7 @@ from __future__ import annotations
6
6
  from abc import abstractmethod
7
7
  from collections.abc import Sequence, Set, Iterable, Iterator
8
8
  from dataclasses import dataclass
9
- from typing import TypeVar
9
+ from typing import TypeVar, final
10
10
  from .. import visitors
11
11
  from ..errors import CollisionError
12
12
  from ..visitors import walking
@@ -17,6 +17,7 @@ __all__ = (
17
17
  "Variable",
18
18
  "Abstraction",
19
19
  "Application",
20
+ "abc",
20
21
  "arithmetic",
21
22
  "logic",
22
23
  "pairs",
@@ -128,6 +129,7 @@ class Term(Iterable["Term[V]"]):
128
129
  return not self.free_variables()
129
130
 
130
131
 
132
+ @final
131
133
  @dataclass(unsafe_hash=True, slots=True)
132
134
  class Variable(Term[V]):
133
135
  """
@@ -197,6 +199,7 @@ class Variable(Term[V]):
197
199
  return visitor.visit_variable(self)
198
200
 
199
201
 
202
+ @final
200
203
  @dataclass(unsafe_hash=True, slots=True)
201
204
  class Abstraction(Term[V]):
202
205
  """
@@ -278,7 +281,7 @@ class Abstraction(Term[V]):
278
281
  )
279
282
  raise CollisionError("new variable would bind free variable in body", (new,))
280
283
 
281
- def eta_reduction(self) -> Term[V]: # type: ignore[return]
284
+ def eta_reduction(self) -> Term[V]:
282
285
  """
283
286
  Remove a useless abstraction.
284
287
 
@@ -289,8 +292,6 @@ class Abstraction(Term[V]):
289
292
  case Application(f, Variable(x)) if x == self.bound and x not in f.free_variables():
290
293
  return f
291
294
  case _:
292
- # mypy detects missing returns
293
- # because of https://github.com/python/mypy/issues/12534
294
295
  raise ValueError("abstraction is not useless")
295
296
 
296
297
  def accept(self, visitor: visitors.Visitor[T, V]) -> T:
@@ -316,6 +317,7 @@ class Abstraction(Term[V]):
316
317
  )
317
318
 
318
319
 
320
+ @final
319
321
  @dataclass(unsafe_hash=True, slots=True)
320
322
  class Application(Term[V]):
321
323
  """
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/python3
2
+
3
+ """Predefined Variables for all ASCII letters"""
4
+
5
+ from string import ascii_letters
6
+ from . import Variable
7
+
8
+ __all__ = tuple(ascii_letters)
9
+
10
+ # better IDE autocompletion
11
+ a, b, c, d, e, f, g, h, i, j = map(Variable, "abcdefghij")
12
+ k, l, m, n, o, p, q, r, s, t = map(Variable, "klmnopqrst")
13
+ u, v, w, x, y, z = map(Variable, "uvwxyz")
14
+
15
+ A, B, C, D, E, F, G, H, I, J = map(Variable, "ABCDEFGHIJ")
16
+ K, L, M, N, O, P, Q, R, S, T = map(Variable, "KLMNOPQRST")
17
+ U, V, W, X, Y, Z = map(Variable, "UVWXYZ")
@@ -2,6 +2,7 @@
2
2
 
3
3
  """Implementations of natural numbers and arithmetic operators"""
4
4
 
5
+ from typing import Final
5
6
  from . import Term, Variable, Abstraction, Application
6
7
  from .logic import TRUE, FALSE
7
8
 
@@ -16,13 +17,13 @@ __all__ = (
16
17
  "number"
17
18
  )
18
19
 
19
- ISZERO = Variable("n").apply_to(FALSE.abstract("x"), TRUE).abstract("n")
20
+ ISZERO: Final = Variable("n").apply_to(FALSE.abstract("x"), TRUE).abstract("n")
20
21
  """
21
22
  Term which evaluates to :const:`lambda_calculus.terms.logic.TRUE`
22
23
  if its argument is zero, :const:`lambda_calculus.terms.logic.FALSE` otherwise
23
24
  """
24
25
 
25
- SUCCESSOR = Abstraction.curried(
26
+ SUCCESSOR: Final = Abstraction.curried(
26
27
  ("n", "f", "x"),
27
28
  Application(
28
29
  Variable("f"),
@@ -36,7 +37,7 @@ SUCCESSOR = Abstraction.curried(
36
37
  Term evaluating to its argument incremented by one.
37
38
  """
38
39
 
39
- PREDECESSOR = Abstraction.curried(
40
+ PREDECESSOR: Final = Abstraction.curried(
40
41
  ("n", "f", "x"),
41
42
  Application.with_arguments(
42
43
  Variable("n"),
@@ -60,7 +61,7 @@ PREDECESSOR = Abstraction.curried(
60
61
  Term ealuating to its argument decremented by one.
61
62
  """
62
63
 
63
- ADD = Abstraction.curried(
64
+ ADD: Final = Abstraction.curried(
64
65
  ("m", "n", "f", "x"),
65
66
  Application.with_arguments(
66
67
  Variable("m"),
@@ -77,7 +78,7 @@ ADD = Abstraction.curried(
77
78
  Term evaluating to the sum of its two arguments.
78
79
  """
79
80
 
80
- SUBTRACT = Abstraction.curried(
81
+ SUBTRACT: Final = Abstraction.curried(
81
82
  ("m", "n"),
82
83
  Application.with_arguments(
83
84
  Variable("n"),
@@ -88,7 +89,7 @@ SUBTRACT = Abstraction.curried(
88
89
  Term evaluating to the difference of its two arguments.
89
90
  """
90
91
 
91
- MULTIPLY = Abstraction.curried(
92
+ MULTIPLY: Final = Abstraction.curried(
92
93
  ("m", "n", "f"),
93
94
  Application(
94
95
  Variable("m"),
@@ -102,7 +103,7 @@ MULTIPLY = Abstraction.curried(
102
103
  Term evaluating to the product of its two arguments.
103
104
  """
104
105
 
105
- POWER = Abstraction.curried(
106
+ POWER: Final = Abstraction.curried(
106
107
  ("b", "e"),
107
108
  Application(
108
109
  Variable("e"),
@@ -2,6 +2,7 @@
2
2
 
3
3
  """Common combinators"""
4
4
 
5
+ from typing import Final
5
6
  from . import Variable, Application
6
7
 
7
8
  __all__ = (
@@ -16,7 +17,7 @@ __all__ = (
16
17
  "OMEGA"
17
18
  )
18
19
 
19
- Y = Application(
20
+ Y: Final = Application(
20
21
  Variable("g").apply_to(
21
22
  Variable("x").apply_to(Variable("x"))
22
23
  ).abstract("x"),
@@ -28,7 +29,7 @@ Y = Application(
28
29
  Y combinator used to define recursive terms.
29
30
  """
30
31
 
31
- S = Variable("x").apply_to(
32
+ S: Final = Variable("x").apply_to(
32
33
  Variable("z"),
33
34
  Variable("y").apply_to(Variable("z"))
34
35
  ).abstract("x", "y", "z")
@@ -36,24 +37,24 @@ S = Variable("x").apply_to(
36
37
  S combinator of the SKI combinator calculus.
37
38
  """
38
39
 
39
- K = Variable("x").abstract("x", "y")
40
+ K: Final = Variable("x").abstract("x", "y")
40
41
  """
41
42
  K combinator of the SKI combinator calculus.
42
43
  """
43
44
 
44
- I = Variable("x").abstract("x")
45
+ I: Final = Variable("x").abstract("x")
45
46
  """
46
47
  I combinator of the SKI combinator calculus.
47
48
  """
48
49
 
49
- B = Variable("x").apply_to(
50
+ B: Final = Variable("x").apply_to(
50
51
  Variable("y").apply_to(Variable("z"))
51
52
  ).abstract("x", "y", "z")
52
53
  """
53
54
  B combinator of the BCKW combinator calculus.
54
55
  """
55
56
 
56
- C = Variable("x").apply_to(
57
+ C: Final = Variable("x").apply_to(
57
58
  Variable("z"),
58
59
  Variable("y")
59
60
  ).abstract("x", "y", "z")
@@ -61,7 +62,7 @@ C = Variable("x").apply_to(
61
62
  C combinator of the BCKW combinator calculus.
62
63
  """
63
64
 
64
- W = Variable("x").apply_to(
65
+ W: Final = Variable("x").apply_to(
65
66
  Variable("y"),
66
67
  Variable("y")
67
68
  ).abstract("x", "y")
@@ -69,14 +70,14 @@ W = Variable("x").apply_to(
69
70
  W combinator of the BCKW combinator calculus.
70
71
  """
71
72
 
72
- DELTA = Variable("x").apply_to(
73
+ DELTA: Final = Variable("x").apply_to(
73
74
  Variable("x")
74
75
  ).abstract("x")
75
76
  """
76
77
  Term applying its argument to itself.
77
78
  """
78
79
 
79
- OMEGA = DELTA.apply_to(DELTA)
80
+ OMEGA: Final = DELTA.apply_to(DELTA)
80
81
  """
81
82
  Smallest term with no beta normal form.
82
83
  """
@@ -2,6 +2,7 @@
2
2
 
3
3
  """Implementations of boolean values and logical operators"""
4
4
 
5
+ from typing import Final
5
6
  from . import Variable, Abstraction, Application
6
7
 
7
8
  __all__ = (
@@ -13,17 +14,17 @@ __all__ = (
13
14
  "IF_THEN_ELSE"
14
15
  )
15
16
 
16
- TRUE = Abstraction.curried(("x", "y"), Variable("x"))
17
+ TRUE: Final = Abstraction.curried(("x", "y"), Variable("x"))
17
18
  """
18
19
  Term representing True.
19
20
  """
20
21
 
21
- FALSE = Abstraction.curried(("x", "y"), Variable("y"))
22
+ FALSE: Final = Abstraction.curried(("x", "y"), Variable("y"))
22
23
  """
23
24
  Term representing False
24
25
  """
25
26
 
26
- AND = Abstraction.curried(
27
+ AND: Final = Abstraction.curried(
27
28
  ("p", "q"),
28
29
  Application.with_arguments(Variable("p"), (Variable("q"), Variable("p")))
29
30
  )
@@ -31,7 +32,7 @@ AND = Abstraction.curried(
31
32
  Term implementing logical conjunction between its two arguments.
32
33
  """
33
34
 
34
- OR = Abstraction.curried(
35
+ OR: Final = Abstraction.curried(
35
36
  ("p", "q"),
36
37
  Application.with_arguments(Variable("p"), (Variable("p"), Variable("q")))
37
38
  )
@@ -39,12 +40,12 @@ OR = Abstraction.curried(
39
40
  Term implementing logical disjunction between its two arguments.
40
41
  """
41
42
 
42
- NOT = Abstraction("p", Application.with_arguments(Variable("p"), (FALSE, TRUE)))
43
+ NOT: Final = Abstraction("p", Application.with_arguments(Variable("p"), (FALSE, TRUE)))
43
44
  """
44
45
  Term performing logical negation of its argument.
45
46
  """
46
47
 
47
- IF_THEN_ELSE = Abstraction.curried(
48
+ IF_THEN_ELSE: Final = Abstraction.curried(
48
49
  ("p", "a", "b"),
49
50
  Application.with_arguments(Variable("p"), (Variable("a"), Variable("b")))
50
51
  )
@@ -2,6 +2,7 @@
2
2
 
3
3
  """Implementation of pairs"""
4
4
 
5
+ from typing import Final
5
6
  from . import Variable, Abstraction, Application
6
7
  from .logic import TRUE, FALSE
7
8
 
@@ -13,7 +14,7 @@ __all__ = (
13
14
  "NULL"
14
15
  )
15
16
 
16
- PAIR = Abstraction.curried(
17
+ PAIR: Final = Abstraction.curried(
17
18
  ("x", "y", "f"),
18
19
  Application.with_arguments(
19
20
  Variable("f"),
@@ -24,22 +25,22 @@ PAIR = Abstraction.curried(
24
25
  Term evaluating to a ordered pair of its two arguments.
25
26
  """
26
27
 
27
- FIRST = Abstraction("p", Application(Variable("p"), TRUE))
28
+ FIRST: Final = Abstraction("p", Application(Variable("p"), TRUE))
28
29
  """
29
30
  Term evaluating to the first value in its argument.
30
31
  """
31
32
 
32
- SECOND = Abstraction("p", Application(Variable("p"), FALSE))
33
+ SECOND: Final = Abstraction("p", Application(Variable("p"), FALSE))
33
34
  """
34
35
  Term evaluating to the second value in its argument.
35
36
  """
36
37
 
37
- NIL = Abstraction("x", TRUE)
38
+ NIL: Final = Abstraction("x", TRUE)
38
39
  """
39
40
  Special Term encoding an empty pair.
40
41
  """
41
42
 
42
- NULL = Abstraction(
43
+ NULL: Final = Abstraction(
43
44
  "p",
44
45
  Application(
45
46
  Variable("p"),
@@ -46,7 +46,7 @@ class BetaNormalisingVisitor(Visitor[Iterator[Step], str]):
46
46
  def skip_intermediate(self, term: terms.Term[str]) -> terms.Term[str]:
47
47
  """
48
48
  Calculate the beta normal form directly.
49
-
49
+
50
50
  :param term: term which should be transformed into ist beta normal form
51
51
  :return: new term representing the beta normal form if it exists
52
52
  """
@@ -77,7 +77,7 @@ class BetaNormalisingVisitor(Visitor[Iterator[Step], str]):
77
77
  def beta_reducation(self, abstraction: terms.Abstraction[str], argument: terms.Term[str]) -> Generator[Step, None, terms.Term[str]]:
78
78
  """
79
79
  Perform beta reduction of an application.
80
-
80
+
81
81
  :param abstraction: abstraction of the application
82
82
  :param argument: argument of the application
83
83
  :return: Generator yielding steps and returning the reduced term
@@ -3,7 +3,6 @@
3
3
  """Substitutions which dont check if the substitutions are valid"""
4
4
 
5
5
  from __future__ import annotations
6
- from collections.abc import Set
7
6
  from typing import TypeVar, final
8
7
  from ... import terms
9
8
  from . import DeferrableSubstitution
@@ -28,18 +27,14 @@ class UnsafeSubstitution(DeferrableSubstitution[V]):
28
27
 
29
28
  value: terms.Term[V]
30
29
 
31
- free_variables: Set[V]
32
-
33
30
  __slots__ = (
34
31
  "variable",
35
- "value",
36
- "free_variables"
32
+ "value"
37
33
  )
38
34
 
39
- def __init__(self, variable: V, value: terms.Term[V], free_variables: Set[V]) -> None:
35
+ def __init__(self, variable: V, value: terms.Term[V]) -> None:
40
36
  self.variable = variable
41
37
  self.value = value
42
- self.free_variables = free_variables
43
38
 
44
39
  @classmethod
45
40
  def from_substitution(cls, variable: V, value: terms.Term[V]) -> UnsafeSubstitution[V]:
@@ -50,7 +45,7 @@ class UnsafeSubstitution(DeferrableSubstitution[V]):
50
45
  :param value: value which should be substituted
51
46
  :return: new instance
52
47
  """
53
- return cls(variable, value, value.free_variables())
48
+ return cls(variable, value)
54
49
 
55
50
  def visit_variable(self, variable: terms.Variable[V]) -> terms.Term[V]:
56
51
  """
@@ -4,7 +4,7 @@
4
4
 
5
5
  from __future__ import annotations
6
6
  from collections.abc import Iterator
7
- from typing import TypeVar
7
+ from typing import TypeVar, final
8
8
  from .. import terms
9
9
  from . import BottomUpVisitor
10
10
 
@@ -15,6 +15,7 @@ __all__ = (
15
15
  V = TypeVar("V")
16
16
 
17
17
 
18
+ @final
18
19
  class DepthFirstVisitor(BottomUpVisitor[Iterator["terms.Term[V]"], V]):
19
20
  """
20
21
  Visitor yielding subterms depth first
@@ -24,6 +25,8 @@ class DepthFirstVisitor(BottomUpVisitor[Iterator["terms.Term[V]"], V]):
24
25
  V: represents the type of variables used in terms
25
26
  """
26
27
 
28
+ __slots__ = ()
29
+
27
30
  def visit_variable(self, variable: terms.Variable[V]) -> Iterator[terms.Term[V]]:
28
31
  """
29
32
  Visit a Variable term.
@@ -1,11 +1,12 @@
1
- Metadata-Version: 2.1
2
- Name: lambda-calculus
3
- Version: 2.2.3
1
+ Metadata-Version: 2.3
2
+ Name: lambda_calculus
3
+ Version: 3.1.0
4
4
  Summary: Implementation of the Lambda calculus
5
- Author-email: Eric Niklas Wolf <eric_niklas.wolf@mailbox.tu-dresden.de>
6
5
  Project-URL: Repository, https://github.com/Deric-W/lambda_calculus
7
6
  Project-URL: Documentation, http://lambda-calculus.readthedocs.io/
8
7
  Project-URL: Bugtracker, https://github.com/Deric-W/lambda_calculus/issues
8
+ Author-email: Eric Niklas Wolf <eric_niklas.wolf@mailbox.tu-dresden.de>
9
+ License-File: LICENSE
9
10
  Classifier: Intended Audience :: Education
10
11
  Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
11
12
  Classifier: Operating System :: OS Independent
@@ -15,10 +16,10 @@ Classifier: Topic :: Utilities
15
16
  Classifier: Typing :: Typed
16
17
  Requires-Python: >=3.10
17
18
  Description-Content-Type: text/markdown
18
- License-File: LICENSE
19
19
 
20
20
  # lambda_calculus
21
21
 
22
+ [![Hatch project](https://img.shields.io/badge/%F0%9F%A5%9A-Hatch-4051b5.svg)](https://github.com/pypa/hatch)
22
23
  ![Tests](https://github.com/Deric-W/lambda_calculus/actions/workflows/Tests.yaml/badge.svg)
23
24
  [![codecov](https://codecov.io/gh/Deric-W/lambda_calculus/branch/main/graph/badge.svg?token=SU3982mC17)](https://codecov.io/gh/Deric-W/lambda_calculus)
24
25
  [![Documentation Status](https://readthedocs.org/projects/lambda-calculus/badge/?version=stable)](https://lambda-calculus.readthedocs.io/en/stable/?badge=stable)
@@ -111,4 +112,4 @@ assert BetaNormalisingVisitor().skip_intermediate(term) == Application.with_argu
111
112
  Variable("+"),
112
113
  (Variable("4"), Variable("3"))
113
114
  )
114
- ```
115
+ ```
@@ -0,0 +1,20 @@
1
+ lambda_calculus/__init__.py,sha256=4HEzc-fklHdsxdB5vQY8Goxpay2xomfhpIVG_EEY3y4,340
2
+ lambda_calculus/errors.py,sha256=WVoIbibq6Ey-nzr99fUdITneGBxR871xnvGKWWhG37E,1185
3
+ lambda_calculus/py.typed,sha256=rVxfNzv1aKmfThIlRztkUwWiKeYa4XTdtNMh3FV-dGM,25
4
+ lambda_calculus/terms/__init__.py,sha256=tHVY4J7MaDWqpkOrxgcIqYuKn38drbjIm2lPFdZjhrU,12440
5
+ lambda_calculus/terms/abc.py,sha256=PyJDArUZM4TzskF7LqPx6luG34ptUawYUChkBlM2az0,510
6
+ lambda_calculus/terms/arithmetic.py,sha256=0-vvpTvioTfVLiMNt1MazrO28eMZAxHZudzt0IUoel0,2934
7
+ lambda_calculus/terms/combinators.py,sha256=OXbOKIA1V-7UYpPsx8HW8vA0-07ZtV72-OjXWK8wZgQ,1525
8
+ lambda_calculus/terms/logic.py,sha256=40tunDbyjQlm6ENse3psuosfJEsp1jR5hZPrEEruisE,1246
9
+ lambda_calculus/terms/pairs.py,sha256=h1OwLxda7FVxQ0mDYuTVHbJ28WuZPQnus4mIzc8UCUc,1045
10
+ lambda_calculus/visitors/__init__.py,sha256=jQoqB86o5gBuVbIFaG_-Zhiyk39ttHWqScGn85zSNfU,5033
11
+ lambda_calculus/visitors/normalisation.py,sha256=EUFaA1xIssJVL7MDAK3IWuLEArk3HdVjSP2lKr9Dz-s,4471
12
+ lambda_calculus/visitors/walking.py,sha256=01QgvJ-zjhQCF2r7zJQB__49WekGiNEa55JuZoF5v0g,1889
13
+ lambda_calculus/visitors/substitution/__init__.py,sha256=hBAKMal-mhx4wL0m-TJUEK2ZNwKIvnIXfFgYkf058tk,4326
14
+ lambda_calculus/visitors/substitution/checked.py,sha256=ZP9lEFyEvNXlJPh6-wXoMC_IK_h3IoLdtjTa-N8DW7o,4445
15
+ lambda_calculus/visitors/substitution/renaming.py,sha256=4m-OEbOw8ibkUkF7rk-0vpf3WP_44gXjrgSCVE4lvDk,7707
16
+ lambda_calculus/visitors/substitution/unsafe.py,sha256=aholWL9aBuC_R4BuPRLZr6oodRKSFPrYvCHQZotkFTY,2419
17
+ lambda_calculus-3.1.0.dist-info/METADATA,sha256=Tk5GxJZlkZLwdZXIkQwTRwaq2z4fepsqzvnzfa_ve60,3790
18
+ lambda_calculus-3.1.0.dist-info/WHEEL,sha256=as-1oFTWSeWBgyzh0O_qF439xqBe6AbBgt4MfYe5zwY,87
19
+ lambda_calculus-3.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
20
+ lambda_calculus-3.1.0.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.37.1)
2
+ Generator: hatchling 1.22.5
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -1,20 +0,0 @@
1
- lambda_calculus/__init__.py,sha256=AAZfBOYtqGWRwluKg5hnif-q3un0lT_01ZncU7P5e9g,340
2
- lambda_calculus/errors.py,sha256=WVoIbibq6Ey-nzr99fUdITneGBxR871xnvGKWWhG37E,1185
3
- lambda_calculus/py.typed,sha256=rVxfNzv1aKmfThIlRztkUwWiKeYa4XTdtNMh3FV-dGM,25
4
- lambda_calculus/terms/__init__.py,sha256=QO2CUqvxDOOS_wGF0YYk7wj8LH85N6Ovgk-K0x631zY,12546
5
- lambda_calculus/terms/arithmetic.py,sha256=wSAgtl58u5LimyD9s5FPIuCmjcvRdZXPE4wnDh59nT8,2860
6
- lambda_calculus/terms/combinators.py,sha256=cjIeKxgaSLOgmozEIU_Umr5QqgQQ6o7IsGlROD-uY_U,1437
7
- lambda_calculus/terms/logic.py,sha256=P397XB-Yjqc4kwjctbNzE1P1F6SCSkngCKAFkKrpT3U,1179
8
- lambda_calculus/terms/pairs.py,sha256=azxo3jtbhh7cyRLa8QU6VF96GEb6IZWQ5gr1hO_IDeQ,985
9
- lambda_calculus/visitors/__init__.py,sha256=jQoqB86o5gBuVbIFaG_-Zhiyk39ttHWqScGn85zSNfU,5033
10
- lambda_calculus/visitors/normalisation.py,sha256=VWBbienaPH5B-vbs8T5Q7StElGmpgoJnVfvuizyVfgE,4487
11
- lambda_calculus/visitors/walking.py,sha256=HjU7nTq1hMy0YWo95TjsyM6YNw2zvUWBeCX9EG2OfMk,1855
12
- lambda_calculus/visitors/substitution/__init__.py,sha256=hBAKMal-mhx4wL0m-TJUEK2ZNwKIvnIXfFgYkf058tk,4326
13
- lambda_calculus/visitors/substitution/checked.py,sha256=ZP9lEFyEvNXlJPh6-wXoMC_IK_h3IoLdtjTa-N8DW7o,4445
14
- lambda_calculus/visitors/substitution/renaming.py,sha256=4m-OEbOw8ibkUkF7rk-0vpf3WP_44gXjrgSCVE4lvDk,7707
15
- lambda_calculus/visitors/substitution/unsafe.py,sha256=CMAsi-Z-c0sO-Eu9iwQiJuCE0NcR0tsyUoS52jEvx5o,2598
16
- lambda_calculus-2.2.3.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
17
- lambda_calculus-2.2.3.dist-info/METADATA,sha256=3RC99zbDUYF1wVglrdkPmmSQva6zYDrWbunw4VZAUG0,3681
18
- lambda_calculus-2.2.3.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
19
- lambda_calculus-2.2.3.dist-info/top_level.txt,sha256=p_Qfc-yRgkY5j0TZmT15x86trbd0oCVEJyEsF3kHKTo,16
20
- lambda_calculus-2.2.3.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- lambda_calculus