Interval extensionality?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







3















I asked the following question on the CS SE:




For example, in the proof of lemma 6.4.1 in the HoTT book, a function
inductively defined over a function is simply applied on paths loop
and refl, and then a path between loop and refl is used
(presumably by congruence via f) to construct a path between f loop and f refl:




Suppose that loop = refl base. [...] with x : A and p : x = x, there is a function f : S1 → A defined by f(base) :≡ x and
f(loop) := p, we have



p = f(loop) = f(refl base) = refl x.



But in a cubical setting, things are not so clear-cut. f(loop) is
not well-typed, only f(loop i) is, for some i : I. But then that
above proof becomes



p = <i> f (loop i) = <i> f (refl base i) = refl x


but doesn't that need some kind of "interval extensionality" in the
middle step? What exactly is the justification of the middle step in
cubical type theory? I can see how to prove ∀ i → f (loop i) = f (refl base i), but how does one "lift" that to <i> f (loop i) = <i> f (refl base i)?




I haven't received a response there so I'm going to try here, with concrete Agda code to back it.



I am trying to turn the above proof into Cubical Agda as follows. First, given p, the definition of f is straightforward:



  hyp : loop ≡ refl {x = base}

p : x ≡ x

f : S¹ → A
f base = x
f (loop i) = p i


We can prove pointwise along loop that f (loop i) ≡ f (refl i):



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = cong (λ p → f (p i)) hyp


(to see why, here it is in more detail:



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = begin
f (loop i) ≡⟨ cong (λ p → f (p i)) hyp ⟩
f (refl {x = base} i) ≡⟨⟩
f base ∎


)



but if I try to prove it for the whole thing:



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ (λ i → proofAt i) ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎


it fails, I would think because of the "interval extensionality" I am trying to use:




Cannot instantiate the metavariable _342 to solution f (loop i) ≡ f base since it contains the variable i which is not in scope of the
metavariable or irrelevant in the metavariable but relevant in the
solution



when checking that the expression proofAt i has type _A_342




trying to eta-convert it to just proofAt_ also fails, but for a different reason (and I think there is, in general, no eta conversion for paths):



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ proofAt_ ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎



((i : I) → f (loop i) ≡ f base) !=< _344 ≡ _y_345 of type
;Agda.Primitive.Setω




So, what is the correct CTT transliteration of the above HoTT proof?










share|improve this question























  • when you see things like f : Circle -> A, and f(loop) in the book, you should read them as shorthands for "cong f loop".

    – Saizan
    Nov 26 '18 at 9:04











  • paths do have eta, but proofAt_ is not a path, it's a function from I to paths.

    – Saizan
    Nov 26 '18 at 9:06


















3















I asked the following question on the CS SE:




For example, in the proof of lemma 6.4.1 in the HoTT book, a function
inductively defined over a function is simply applied on paths loop
and refl, and then a path between loop and refl is used
(presumably by congruence via f) to construct a path between f loop and f refl:




Suppose that loop = refl base. [...] with x : A and p : x = x, there is a function f : S1 → A defined by f(base) :≡ x and
f(loop) := p, we have



p = f(loop) = f(refl base) = refl x.



But in a cubical setting, things are not so clear-cut. f(loop) is
not well-typed, only f(loop i) is, for some i : I. But then that
above proof becomes



p = <i> f (loop i) = <i> f (refl base i) = refl x


but doesn't that need some kind of "interval extensionality" in the
middle step? What exactly is the justification of the middle step in
cubical type theory? I can see how to prove ∀ i → f (loop i) = f (refl base i), but how does one "lift" that to <i> f (loop i) = <i> f (refl base i)?




I haven't received a response there so I'm going to try here, with concrete Agda code to back it.



I am trying to turn the above proof into Cubical Agda as follows. First, given p, the definition of f is straightforward:



  hyp : loop ≡ refl {x = base}

p : x ≡ x

f : S¹ → A
f base = x
f (loop i) = p i


We can prove pointwise along loop that f (loop i) ≡ f (refl i):



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = cong (λ p → f (p i)) hyp


(to see why, here it is in more detail:



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = begin
f (loop i) ≡⟨ cong (λ p → f (p i)) hyp ⟩
f (refl {x = base} i) ≡⟨⟩
f base ∎


)



but if I try to prove it for the whole thing:



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ (λ i → proofAt i) ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎


it fails, I would think because of the "interval extensionality" I am trying to use:




Cannot instantiate the metavariable _342 to solution f (loop i) ≡ f base since it contains the variable i which is not in scope of the
metavariable or irrelevant in the metavariable but relevant in the
solution



when checking that the expression proofAt i has type _A_342




trying to eta-convert it to just proofAt_ also fails, but for a different reason (and I think there is, in general, no eta conversion for paths):



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ proofAt_ ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎



((i : I) → f (loop i) ≡ f base) !=< _344 ≡ _y_345 of type
;Agda.Primitive.Setω




So, what is the correct CTT transliteration of the above HoTT proof?










share|improve this question























  • when you see things like f : Circle -> A, and f(loop) in the book, you should read them as shorthands for "cong f loop".

    – Saizan
    Nov 26 '18 at 9:04











  • paths do have eta, but proofAt_ is not a path, it's a function from I to paths.

    – Saizan
    Nov 26 '18 at 9:06














3












3








3


0






I asked the following question on the CS SE:




For example, in the proof of lemma 6.4.1 in the HoTT book, a function
inductively defined over a function is simply applied on paths loop
and refl, and then a path between loop and refl is used
(presumably by congruence via f) to construct a path between f loop and f refl:




Suppose that loop = refl base. [...] with x : A and p : x = x, there is a function f : S1 → A defined by f(base) :≡ x and
f(loop) := p, we have



p = f(loop) = f(refl base) = refl x.



But in a cubical setting, things are not so clear-cut. f(loop) is
not well-typed, only f(loop i) is, for some i : I. But then that
above proof becomes



p = <i> f (loop i) = <i> f (refl base i) = refl x


but doesn't that need some kind of "interval extensionality" in the
middle step? What exactly is the justification of the middle step in
cubical type theory? I can see how to prove ∀ i → f (loop i) = f (refl base i), but how does one "lift" that to <i> f (loop i) = <i> f (refl base i)?




I haven't received a response there so I'm going to try here, with concrete Agda code to back it.



I am trying to turn the above proof into Cubical Agda as follows. First, given p, the definition of f is straightforward:



  hyp : loop ≡ refl {x = base}

p : x ≡ x

f : S¹ → A
f base = x
f (loop i) = p i


We can prove pointwise along loop that f (loop i) ≡ f (refl i):



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = cong (λ p → f (p i)) hyp


(to see why, here it is in more detail:



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = begin
f (loop i) ≡⟨ cong (λ p → f (p i)) hyp ⟩
f (refl {x = base} i) ≡⟨⟩
f base ∎


)



but if I try to prove it for the whole thing:



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ (λ i → proofAt i) ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎


it fails, I would think because of the "interval extensionality" I am trying to use:




Cannot instantiate the metavariable _342 to solution f (loop i) ≡ f base since it contains the variable i which is not in scope of the
metavariable or irrelevant in the metavariable but relevant in the
solution



when checking that the expression proofAt i has type _A_342




trying to eta-convert it to just proofAt_ also fails, but for a different reason (and I think there is, in general, no eta conversion for paths):



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ proofAt_ ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎



((i : I) → f (loop i) ≡ f base) !=< _344 ≡ _y_345 of type
;Agda.Primitive.Setω




So, what is the correct CTT transliteration of the above HoTT proof?










share|improve this question














I asked the following question on the CS SE:




For example, in the proof of lemma 6.4.1 in the HoTT book, a function
inductively defined over a function is simply applied on paths loop
and refl, and then a path between loop and refl is used
(presumably by congruence via f) to construct a path between f loop and f refl:




Suppose that loop = refl base. [...] with x : A and p : x = x, there is a function f : S1 → A defined by f(base) :≡ x and
f(loop) := p, we have



p = f(loop) = f(refl base) = refl x.



But in a cubical setting, things are not so clear-cut. f(loop) is
not well-typed, only f(loop i) is, for some i : I. But then that
above proof becomes



p = <i> f (loop i) = <i> f (refl base i) = refl x


but doesn't that need some kind of "interval extensionality" in the
middle step? What exactly is the justification of the middle step in
cubical type theory? I can see how to prove ∀ i → f (loop i) = f (refl base i), but how does one "lift" that to <i> f (loop i) = <i> f (refl base i)?




I haven't received a response there so I'm going to try here, with concrete Agda code to back it.



I am trying to turn the above proof into Cubical Agda as follows. First, given p, the definition of f is straightforward:



  hyp : loop ≡ refl {x = base}

p : x ≡ x

f : S¹ → A
f base = x
f (loop i) = p i


We can prove pointwise along loop that f (loop i) ≡ f (refl i):



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = cong (λ p → f (p i)) hyp


(to see why, here it is in more detail:



  proofAt_ : ∀ i → f (loop i) ≡ f base
proofAt i = begin
f (loop i) ≡⟨ cong (λ p → f (p i)) hyp ⟩
f (refl {x = base} i) ≡⟨⟩
f base ∎


)



but if I try to prove it for the whole thing:



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ (λ i → proofAt i) ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎


it fails, I would think because of the "interval extensionality" I am trying to use:




Cannot instantiate the metavariable _342 to solution f (loop i) ≡ f base since it contains the variable i which is not in scope of the
metavariable or irrelevant in the metavariable but relevant in the
solution



when checking that the expression proofAt i has type _A_342




trying to eta-convert it to just proofAt_ also fails, but for a different reason (and I think there is, in general, no eta conversion for paths):



  proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ proofAt_ ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎



((i : I) → f (loop i) ≡ f base) !=< _344 ≡ _y_345 of type
;Agda.Primitive.Setω




So, what is the correct CTT transliteration of the above HoTT proof?







agda cubical-type-theory homotopy-type-theory






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 25 '18 at 3:07









CactusCactus

18.9k848113




18.9k848113













  • when you see things like f : Circle -> A, and f(loop) in the book, you should read them as shorthands for "cong f loop".

    – Saizan
    Nov 26 '18 at 9:04











  • paths do have eta, but proofAt_ is not a path, it's a function from I to paths.

    – Saizan
    Nov 26 '18 at 9:06



















  • when you see things like f : Circle -> A, and f(loop) in the book, you should read them as shorthands for "cong f loop".

    – Saizan
    Nov 26 '18 at 9:04











  • paths do have eta, but proofAt_ is not a path, it's a function from I to paths.

    – Saizan
    Nov 26 '18 at 9:06

















when you see things like f : Circle -> A, and f(loop) in the book, you should read them as shorthands for "cong f loop".

– Saizan
Nov 26 '18 at 9:04





when you see things like f : Circle -> A, and f(loop) in the book, you should read them as shorthands for "cong f loop".

– Saizan
Nov 26 '18 at 9:04













paths do have eta, but proofAt_ is not a path, it's a function from I to paths.

– Saizan
Nov 26 '18 at 9:06





paths do have eta, but proofAt_ is not a path, it's a function from I to paths.

– Saizan
Nov 26 '18 at 9:06












2 Answers
2






active

oldest

votes


















3














Paths do have eta rules



https://github.com/Saizan/cubical-demo/blob/master/examples/Cubical/Examples/AIM_Demo/DemoPath.agda#L59



however the type path is not the same as the type of functions from the interval "I", so sometimes you need a lambda abstraction just to convert between the two types. (Lambda and application are ad-hoc overloaded between the two types).



f loop indeed does not typecheck, not in even in HoTT. However the book uses it as a shorthand for ap f loop, where ap = cong from the cubical library.



Also, your proof can be completed, but you need to use proofAt_ correctly: the i dimension in proof is the one connecting cong f loop and refl {x = f base}, so you want to provide i as the second argument of proofAt_.



proof : p ≡ refl
proof = begin
(λ i → p i) ≡⟨⟩
(λ i → f (loop i)) ≡⟨ (λ i j → proofAt j i) ⟩
(λ i → f base) ≡⟨⟩
(λ i → refl {x = x} i) ∎





share|improve this answer

































    3














    See Saizan's answer for a solution along the original lines. Alternatively, there is a simple solution:



    proof : p ≡ refl
    proof i j = f (hyp i j)


    Or proof = cong (cong f) hyp. The key is that hyp is two-dimensional, and f acts on 0-dimensional elements, so f should be applied to the 0-dimensional components of hyp.






    share|improve this answer





















    • 2





      Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

      – Saizan
      Nov 26 '18 at 9:27











    • @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

      – András Kovács
      Nov 26 '18 at 9:44














    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53464314%2finterval-extensionality%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3














    Paths do have eta rules



    https://github.com/Saizan/cubical-demo/blob/master/examples/Cubical/Examples/AIM_Demo/DemoPath.agda#L59



    however the type path is not the same as the type of functions from the interval "I", so sometimes you need a lambda abstraction just to convert between the two types. (Lambda and application are ad-hoc overloaded between the two types).



    f loop indeed does not typecheck, not in even in HoTT. However the book uses it as a shorthand for ap f loop, where ap = cong from the cubical library.



    Also, your proof can be completed, but you need to use proofAt_ correctly: the i dimension in proof is the one connecting cong f loop and refl {x = f base}, so you want to provide i as the second argument of proofAt_.



    proof : p ≡ refl
    proof = begin
    (λ i → p i) ≡⟨⟩
    (λ i → f (loop i)) ≡⟨ (λ i j → proofAt j i) ⟩
    (λ i → f base) ≡⟨⟩
    (λ i → refl {x = x} i) ∎





    share|improve this answer






























      3














      Paths do have eta rules



      https://github.com/Saizan/cubical-demo/blob/master/examples/Cubical/Examples/AIM_Demo/DemoPath.agda#L59



      however the type path is not the same as the type of functions from the interval "I", so sometimes you need a lambda abstraction just to convert between the two types. (Lambda and application are ad-hoc overloaded between the two types).



      f loop indeed does not typecheck, not in even in HoTT. However the book uses it as a shorthand for ap f loop, where ap = cong from the cubical library.



      Also, your proof can be completed, but you need to use proofAt_ correctly: the i dimension in proof is the one connecting cong f loop and refl {x = f base}, so you want to provide i as the second argument of proofAt_.



      proof : p ≡ refl
      proof = begin
      (λ i → p i) ≡⟨⟩
      (λ i → f (loop i)) ≡⟨ (λ i j → proofAt j i) ⟩
      (λ i → f base) ≡⟨⟩
      (λ i → refl {x = x} i) ∎





      share|improve this answer




























        3












        3








        3







        Paths do have eta rules



        https://github.com/Saizan/cubical-demo/blob/master/examples/Cubical/Examples/AIM_Demo/DemoPath.agda#L59



        however the type path is not the same as the type of functions from the interval "I", so sometimes you need a lambda abstraction just to convert between the two types. (Lambda and application are ad-hoc overloaded between the two types).



        f loop indeed does not typecheck, not in even in HoTT. However the book uses it as a shorthand for ap f loop, where ap = cong from the cubical library.



        Also, your proof can be completed, but you need to use proofAt_ correctly: the i dimension in proof is the one connecting cong f loop and refl {x = f base}, so you want to provide i as the second argument of proofAt_.



        proof : p ≡ refl
        proof = begin
        (λ i → p i) ≡⟨⟩
        (λ i → f (loop i)) ≡⟨ (λ i j → proofAt j i) ⟩
        (λ i → f base) ≡⟨⟩
        (λ i → refl {x = x} i) ∎





        share|improve this answer















        Paths do have eta rules



        https://github.com/Saizan/cubical-demo/blob/master/examples/Cubical/Examples/AIM_Demo/DemoPath.agda#L59



        however the type path is not the same as the type of functions from the interval "I", so sometimes you need a lambda abstraction just to convert between the two types. (Lambda and application are ad-hoc overloaded between the two types).



        f loop indeed does not typecheck, not in even in HoTT. However the book uses it as a shorthand for ap f loop, where ap = cong from the cubical library.



        Also, your proof can be completed, but you need to use proofAt_ correctly: the i dimension in proof is the one connecting cong f loop and refl {x = f base}, so you want to provide i as the second argument of proofAt_.



        proof : p ≡ refl
        proof = begin
        (λ i → p i) ≡⟨⟩
        (λ i → f (loop i)) ≡⟨ (λ i j → proofAt j i) ⟩
        (λ i → f base) ≡⟨⟩
        (λ i → refl {x = x} i) ∎






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 30 '18 at 15:21









        Cactus

        18.9k848113




        18.9k848113










        answered Nov 26 '18 at 9:25









        SaizanSaizan

        72434




        72434

























            3














            See Saizan's answer for a solution along the original lines. Alternatively, there is a simple solution:



            proof : p ≡ refl
            proof i j = f (hyp i j)


            Or proof = cong (cong f) hyp. The key is that hyp is two-dimensional, and f acts on 0-dimensional elements, so f should be applied to the 0-dimensional components of hyp.






            share|improve this answer





















            • 2





              Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

              – Saizan
              Nov 26 '18 at 9:27











            • @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

              – András Kovács
              Nov 26 '18 at 9:44


















            3














            See Saizan's answer for a solution along the original lines. Alternatively, there is a simple solution:



            proof : p ≡ refl
            proof i j = f (hyp i j)


            Or proof = cong (cong f) hyp. The key is that hyp is two-dimensional, and f acts on 0-dimensional elements, so f should be applied to the 0-dimensional components of hyp.






            share|improve this answer





















            • 2





              Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

              – Saizan
              Nov 26 '18 at 9:27











            • @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

              – András Kovács
              Nov 26 '18 at 9:44
















            3












            3








            3







            See Saizan's answer for a solution along the original lines. Alternatively, there is a simple solution:



            proof : p ≡ refl
            proof i j = f (hyp i j)


            Or proof = cong (cong f) hyp. The key is that hyp is two-dimensional, and f acts on 0-dimensional elements, so f should be applied to the 0-dimensional components of hyp.






            share|improve this answer















            See Saizan's answer for a solution along the original lines. Alternatively, there is a simple solution:



            proof : p ≡ refl
            proof i j = f (hyp i j)


            Or proof = cong (cong f) hyp. The key is that hyp is two-dimensional, and f acts on 0-dimensional elements, so f should be applied to the 0-dimensional components of hyp.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 26 '18 at 9:45

























            answered Nov 25 '18 at 8:52









            András KovácsAndrás Kovács

            25.3k33784




            25.3k33784








            • 2





              Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

              – Saizan
              Nov 26 '18 at 9:27











            • @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

              – András Kovács
              Nov 26 '18 at 9:44
















            • 2





              Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

              – Saizan
              Nov 26 '18 at 9:27











            • @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

              – András Kovács
              Nov 26 '18 at 9:44










            2




            2





            Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

            – Saizan
            Nov 26 '18 at 9:27





            Functions (i : I) -> A are not just higher-order syntax, they have straightforward semantics in the cubical sets model and are occasionally quite convenient.

            – Saizan
            Nov 26 '18 at 9:27













            @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

            – András Kovács
            Nov 26 '18 at 9:44







            @Saizan thanks, I'm deferring to experts in this matter (removed my speculations).

            – András Kovács
            Nov 26 '18 at 9:44




















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53464314%2finterval-extensionality%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Academy of Television Arts & Sciences

            L'Équipe

            1995 France bombings